Wie komme ich zu folgender Darstellung meines Diagrammes? Danke für eure Hilfe.

alt text

Quellcode:

Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{tikz,pgfplots}
\begin{document}
\pgfplotsset{width=15cm,height=10cm}
\begin{tikzpicture}
\begin{axis}[colorbar sampled,
colorbar style={samples=13},
grid=both,
scale only axis=true,
width=10cm,
height=15cm,
xtick={0,1,...,10},
ytick={-8,-7,...,10},
xmin=0,
xmax=10,
ymin=-8,
ymax=8,
]
\addplot3[
scatter,mark=text, text mark={\rule{6mm}{3mm}},only marks,
point meta=\thisrow{myvalue}
]
table {
x y color myvalue
2 3 1 100
4 3 2 3
2 7 3 0.75
7 7 4 45
8 5 2 3
2 5 1 10
4 -4 2 1
4 1 3 75
5 -1 4 4
5 2 2 3
1 -2 1 10
2 5 2 5
3 -8 3 75
4 5 4 42
7 -2 2 2
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 30 Aug '16, 10:11

Linux404's gravatar image

Linux404
32221622
Akzeptiert-Rate: 100%

bearbeitet 26 Aug '20, 23:10

cis's gravatar image

cis
9.5k96460491

3

Das geht nicht ohne vorherige Verarbeitung mit einem externen Programm. Schau mal hier: https://tex.stackexchange.com/questions/52987/3-dimensional-histogram-in-pgfplots

(30 Aug '16, 10:26) Henri

Hier ist ein Vorschlag. pgfplots hat die Möglichkeit, in einem scatter plot Würfel zu zeichnen und man kann die Längen der Kanten ändern.

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\documentclass[tikz,border=3.14pt]{standalone}
\usetikzlibrary{calc}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.16}
% from https://tex.stackexchange.com/a/102770/121799
\def\pgfplotsinvokeiflessthan#1#2#3#4{%
\pgfkeysvalueof{/pgfplots/iflessthan/.@cmd}{#1}{#2}{#3}{#4}\pgfeov
}%
\def\pgfplotsmulticmpthree#1#2#3#4#5#6\do#7#8{%
\pgfplotsset{float <}%
\pgfplotsinvokeiflessthan{#1}{#4}{%
% first key <:
#7%
}{%
\pgfplotsinvokeiflessthan{#4}{#1}{%
% first key >:
#8%
}{%
% first key ==:
\pgfplotsset{float <}%
\pgfplotsinvokeiflessthan{#2}{#5}{%
% second key <
#7%
}{%
\pgfplotsinvokeiflessthan{#5}{#2}{%
% second key >
#8%
}{%
% second key ==
\pgfplotsset{float <}%
\pgfplotsinvokeiflessthan{#3}{#6}{%
% third key <
#7%
}{%
% third key >=
#8%
}%
}%
}%
}%
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

UPDATE: Mein ursprünglicher Code hatte einen Fehler, die Balken müssen anders sortiert werden. Glücklicherweise bekommt man bei pgfplots die Lösung gleich mitgeliefert. ;-) Der Code spuckt jetzt einen Skalierungsfaktor aus, der eingetragen werden muss, und zwar ist das 0.9952 in 0.9952*z \as \myz. Ich habe es nicht geschafft, das zu automatisieren. (Die einzige Möglichkeit, die mir einfällt, wäre einen leeren plot in eine \savebox zu schustern, dort den Skalierungsfaktor zu berechnen und dann den richtigen Plot zu fahren. Aber das würde dazu führen, dass der Benutzer auch alles in dein Fake-Plot tut, oder dass ich ein kompliziertes Makro schreibe. Mir erscheint daher, dass das kleinste Übel ist, dass man den Wert nach dem Durchlauf einfach einträgt. Falls jemand einen besseren Vorschlag hat, würde ich den gerne hören, insbesondere wenn der jemand Feuersänger heisst. ;-)

Permanenter link

beantwortet 08 Apr '18, 06:50

Community's gravatar image

Community
21
Akzeptiert-Rate: 56%

bearbeitet 07 Jun '18, 22:35

Gel%C3%B6scht's gravatar image

Gelöscht
(ausgesetzt)

"Ich habe es nicht geschafft, das zu automatisieren."
Ich schon, und zwar hier:

https://golatex.de/viewtopic.php?f=6&t=19123&p=112434#p112434

(26 Aug '20, 12:54) cis

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

Code, hier editierbar zum Übersetzen:
\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,
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 26 Aug '20, 20:56

cis's gravatar image

cis
9.5k96460491
Akzeptiert-Rate: 29%

bearbeitet 26 Aug '20, 21:17

Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×298
×54

gestellte Frage: 30 Aug '16, 10:11

Frage wurde gesehen: 10,207 Mal

zuletzt geändert: 26 Aug '20, 23:10