我想创建一个 ybar 图表,其条形间距均匀,而不是像第一个示例中那样按使用的值间隔。我以为可以使用符号 x 坐标来实现这一点,但使用这种方法会产生很多错误,例如
包 pgfplots 错误:抱歉,输入坐标“1.0”尚未定义为 [normalized]1.0?...table[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}
答案1
以下是来自达莱夫您不必明确输入每个符号坐标。此外,在评论中进行讨论后,还进行了一些更改。
有关详细信息,请查看代码中的注释。
% 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}
答案2
参数必须symbolic x coords
完全是数据中 x 输入的列表。否则,您会得到您提到的错误。修复该错误,它就会像您要求的那样很好地间隔开来。
\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}
如果只是告诉它使用均匀分布的数据就好了,但我不知道该怎么做,也许其他人知道
答案3
我现在决定采用另一种折衷方案。但仍然比同时使用symbolic x coords
和要好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}
xticklabels
它是使用和解决方案的组合斯蒂芬·平诺通过使用x expr=\coordindex
。