Quantcast
Channel: Antworten auf: 3-dimensionales Balkendiagramm mit pgfplots erstellen
Viewing all articles
Browse latest Browse all 2

Antwort von cis

0
0

Ungeachtet des Umstandes, dass das eine perspektivisch verwirrende Darstellung ist, kann man mit pgfplots ein 3D-Bardiagramm so erstellen:

Die Idee ist mark=cube* zu verwenden und die cube/size z so zu manipulieren, dass die gewünschten 3D-Bars entstehen.
Ähnlich der Antwort von @Community, mit dem Unterschied, dass das Auslesen und verwenden der Einheitslänge in z-Richtung automatisiert verlaufen soll.

Setzt man z.B. cube/size z=4mm, so dimensioniert das Würfelchen von seiner Raumposition aus um 2mm und um -2mm in z-Richtung.
Also müssen sie bei x=X, y=Y, z expr={0.5*\thisrow{Z}} positioniert werden.

Die richtige Höhe der cubes kann mit
visualization depends on={\thisrow{Z} \as \zvalue}, scatter/@pre marker code/.append style={ /utils/exec=\pgfmathsetmacro{\barheight}{\zunitlength*\zvalue}, /pgfplots/cube/size z=\barheight },
bestimmt werden, wobei die zunitlength mit
\path let \p1=($(axis cs:0,0,1)-(axis cs:0,0,0)$) in \pgfextra{ \pgfmathsetglobalmacro{\zunitlength}{\y1} } };
gemessen werden kann.

€dit: Es zeigt sich, dass es sinnvoll ist zmax=\zMax zu setzen, dazu kann der maximale z-Wert \zMax in der Form \pgfplotstablegetrowsof{\datatable} \pgfmathtruncatemacro{\RowsNo}{\pgfplotsretval-1} %Zeilenzahl: \RowsNo \pgfmathsetmacro\zMax{0} \foreach \n in {0,...,\RowsNo}{ \pgfplotstablegetelem{\n}{Z}\of{\datatable} \pgfmathparse{\pgfplotsretval > \zMax ? \pgfplotsretval : \zMax} \xdef\zMax{\pgfmathresult} } %Maximalwert z-Achse: \zMax
ermittelt werden.

alt text

\documentclass[border=5pt, tikz]{standalone}\usepackage{pgfplots}\usepackage{pgfplotstable}\pgfplotsset{compat=1.17}\usetikzlibrary{calc}\def\pgfmathsetglobalmacro#1#2{\pgfmathparse{#2}%\global\let#1\pgfmathresult}\pgfplotsset{
colormap = {mycolormap}{
color(0)  = (blue!50!black); 
color(1) = (purple);
color(2) = (green!55!black);
color(3) = (brown);
color(4) = (blue!66)
color(5) = (violet)
},
colormap name=mycolormap,
%colormap name=viridis}\begin{document}\pgfplotstableread[col sep=comma,header=true]{
X,   Y,    Z
2,    0,   4
1,    0,   5
0,    1,   10
3,    1,   1
1,    1,   3
2,    1,   0
1,    2,   0
2,    2,   5
2,    3,   6
1,    4,   7
1,    5,   11
}{\datatable}\begin{tikzpicture}[]
\begin{axis}[
%height=2cm,  width=7cm, % view={120}{40}, x dir=reverse,
xmin=0, 
ymin=0,
zmin=0, 
enlarge z limits={rel=0.25,upper},
xtick={1,...,10},
ytick={1,...,10},
grid=both,
xlabel={$x$},  ylabel={$y$},   zlabel={$z$},
minor z tick num=1,
point meta=explicit,
scatter/use mapped color={draw=mapped color!50!black, 
fill=mapped color!70},
]
% unitlenghth z-Achse ermitteln: \path let \p1=($(axis cs:0,0,1)-(axis cs:0,0,0)$) in 
\pgfextra{\pgfmathsetglobalmacro{\zunitlength}{\y1}} node[yshift=-1cm]{%\zunitlength % anzeigen}; 
\addplot3[
scatter, only marks,
mark=cube*, mark size=5,  %opacity=0.8,
nodes near coords*=, % will er...%%% barheight bestimmen 
visualization depends on={\thisrow{Z}\as\zvalue}, 
scatter/@pre marker code/.append style={
/utils/exec=\pgfmathsetmacro{\barheight}{\zunitlength*\zvalue},
/pgfplots/cube/size z=\barheight},
] table[x=X, y=Y,     
z expr={0.5*\thisrow{Z}}, 
meta expr={\thisrow{Y}}
]{\datatable}; 
\end{axis}\end{tikzpicture}\end{document}

Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles


Audi A6 4g mit Luftfahrwerk Reifenwechsel was beachten


Vivaro Abgassystem überprüfen


Bierkarte basteln


Fehlercode P2188 Kraftstoffsystem Bank 1 Gemisch zu fett bei Leerlauf


kühler lüfter läuft ständig


Gardenline Edelstahl-Säulengrill für 49,99 € bei Aldi Süd


Fehler Dämpfer...


Fehlermekdung Startersystem defekt / Werkstatt!


Osterfest mit Osterfeuer auf der Töpferwiese


Modellpflege KW 45 (SA0)





Latest Images