Ich möchte ein Y-Balken-Diagramm mit gleichmäßig verteilten Balken erstellen, anstatt wie im ersten Beispiel nach den verwendeten Werten zu beabstanden. Ich dachte, dass man hierfür symbolische X-Koordinaten verwenden könnte, aber dies führt zu vielen Fehlern wie
Paket pgfplots-Fehler: Entschuldigung, die Eingabekoordinate „1.0“ wurde nicht als [normalisiert]1.0? definiert. …Tabelle[x-Index=0, y-Index=1]{\loadedtable};
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
Note Anzahl
1.0 1
1.3 1.3
1.7 1.7
2.0 2
2.3 2.3
2.7 2.7
3.0 3
3.3 3.3
3.7 3.7
4.0 4
4.7 4.7
5.0 5
}\loadedtable
%Looks good but the spacing is wrong
\begin{tikzpicture}
\begin{axis}[xtick=data, x=15ex, bar width=3ex, xticklabels={{1,0},{1,3},{1,7},{2,0},{2,3},{2,7},{3,0},{3,3},{3,7},{4,0},{4,7},{5,0}},]
\addplot[ybar] table[x index=0, y index=1]{\loadedtable};
\end{axis}
\end{tikzpicture}
%Here the error occurs
\begin{tikzpicture}
\begin{axis}[xtick=data, x=15ex, bar width=3ex, symbolic x coords={{1,0},{1,3},{1,7},{2,0},{2,3},{2,7},{3,0},{3,3},{3,7},{4,0},{4,7},{5,0}},]
\addplot[ybar] table[x index=0, y index=1]{\loadedtable};
\end{axis}
\end{tikzpicture}
\end{document}
Antwort1
Hier eine etwas verbesserte Antwort vonAbonnierenwo Sie nicht jede symbolische Koordinate explizit eingeben müssen. Außerdem gibt es einige Änderungen, die nach einigen Diskussionen in den Kommentaren aufkamen.
Für Details schauen Sie sich bitte die Kommentare im Code an.
% used PGFPlots v1.15
\begin{filecontents*}{Note.txt}
Note
1,0
1,3
1,7
2,0
2,3
2,7
3,0
3,3
3,7
4,0
4,7
5,0
\end{filecontents*}
\begin{filecontents*}{NotenVerteilung.txt}
Note Anzahl
1.0 1
1.3 1.3
1.7 1.7
2.0 2
2.3 2.3
2.7 2.7
3.0 3
3.3 3.3
3.7 3.7
4.0 4
4.7 4.7
5.0 5
\end{filecontents*}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
x=5ex,
ybar,
bar width=3ex,
xtick=data,
% load labels from the file
xticklabels from table={Note.txt}{Note},
]
\addplot table [
% use the index for the internal number/label
x expr=\coordindex,
y=Anzahl,
]{NotenVerteilung.txt};
\end{axis}
\end{tikzpicture}
\end{document}
Antwort2
Das Argument symbolic x coords
muss genau die Liste der x-Eingaben aus den Daten sein. Andernfalls erhalten Sie den von Ihnen erwähnten Fehler. Beheben Sie diesen Fehler, und es wird die von Ihnen gewünschte, schöne Anordnung erhalten.
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
Note Anzahl
1.0 1
1.3 1.3
1.7 1.7
2.0 2
2.3 2.3
2.7 2.7
3.0 3
3.3 3.3
3.7 3.7
4.0 4
4.7 4.7
5.0 5
}\loadedtable
\begin{tikzpicture}
\begin{axis}[xtick=data,
x=5ex,
bar width=3ex,
symbolic x coords={1.0,1.3,1.7,2.0,2.3,2.7,3.0,3.3,3.7,4.0,4.7,5.0},
]
\addplot[ybar] table[x index=0, y index=1]{\loadedtable};
\end{axis}
\end{tikzpicture}
\end{document}
Es wäre schön, wenn man ihm einfach sagen könnte, dass er die Daten gleichmäßig verteilen soll, aber ich habe keine Ahnung, wie das geht, vielleicht wissen es andere
Antwort3
Dies ist ein weiterer Kompromiss, für den ich mich jetzt entschieden habe. Immer noch besser, als sowohl symbolic x coords
als auch zu verwenden xticklabels
.
\documentclass{minimal}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
Note Anzahl
1.0 1
1.3 1.3
1.7 1.7
2.0 2
2.3 2.3
2.7 2.7
3.0 3
3.3 3.3
3.7 3.7
4.0 4
4.7 4.7
5.0 5
}\loadedtable
\begin{tikzpicture}
\begin{axis}[xtick=data, x=5ex, bar width=3ex, xticklabels={{1,0},{1,3},{1,7},{2,0},{2,3},{2,7},{3,0},{3,3},{3,7},{4,0},{4,7},{5,0}}]
\addplot[ybar] table[x expr=\coordindex, y index=1]{\loadedtable};
\end{axis}
\end{tikzpicture}
\end{document}
Es ist eine Kombination aus der Verwendung xticklabels
und der Lösung vonStefan Pinnowmithilfe von x expr=\coordindex
.