我在绘制 tikzpicture 时遇到了麻烦。缺少一个类别。有人知道如何增加画布宽度吗?
提前致谢!
\pgfplotstableread[row sep =\\, col sep = &]{
Level &Rating \\
0 &2.875 \\
1 &2.954545 \\
2 &2.571429 \\
3 &2.888889 \\
4 &2.923077 \\
5 &2.684211 \\
6 &2.8125 \\
7 &3.043478 \\
8 &3.611111 \\
9 &1.9375 \\
10 &2.833333 \\
11 &2.3125 \\
12 &1.666667 \\
13 &2.684211 \\
14 &2.6 \\
15 &2.75 \\
16 &2.578947 \\
17 &3.333333 \\
18 &2.333333 \\
19 &3 \\
20 &3.3 \\
21 &3.842105 \\
22 &2.916667 \\
23 &2.380952 \\
24 &1.933333 \\
25 &2.6 \\
26 &3.047619 \\
27 &2.833333 \\
28 &2.047619 \\
29 &2.421053 \\
}\mydata
\begin{figure}[hbt!]
\tiny
\centering
\resizebox{0.75\columnwidth}{!}{%
\begin{tikzpicture}[scale=12, transform shape]
\begin{axis}[
ybar interval=0.5,
symbolic x coords={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29},
xtick=data,
]
\addplot table[x = Level, y = Rating]{\mydata};
\end{axis}
\end{tikzpicture}
}
\caption{Raw Results of the User Ratings}
\label{fig:experiment1results}
\end{figure}
答案1
欢迎来到 TeX.SE!如果我理解正确的话,您的抱怨是关于看不到表格最后一行(x = 29)的条形图。这是意料之中的,因为您使用的是ybar interval
,而不是ybar
。引用pgfplots
手册(第节条形图
):
\addplot+[ybar interval]
这种绘图类型会生成宽度(和偏移)相对于坐标间隔的垂直条。
使用间隔时,有一个概念上的区别:间隔定义为二坐标。由于
ybar
每个间隔都有一个值,因此我第条定义为
- 这是的价值我第个坐标,
- 这X的价值我第坐标作为左间隔边界,
- 这X的值(我+1)个坐标作为右间隔边界。
因此,一个坐标太多:最后一个坐标将仅有的用于确定间隔宽度;其是值不会影响条形的外观。
这解释了为什么在您的示例中,没有为 (29, 2.421053) 坐标对绘制条形图。我相信您想要的是样式/pgfplots/ybar
。
下面的示例使用了/pgfplots/ybar
。您可以使用 调整条形的宽度/pgf/bar width
(见下文)。为了在切换到最新pgfplots
API(我使用\pgfplotsset{compat=1.16}
)时保留这种可能性,我删除了symbolic x coords={...}
,这在这里似乎没什么用。事实上,x 坐标都是数字,并且在数据中均匀分布。
如果您希望连续主刻度之间的小刻度数不同,可以使用minor x tick num
如下所示的 。如果这样做,您可能还需要更改主刻度标签字体大小;x tick label style={font=\small}
例如,可以使用 来完成。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\pgfplotstableread[row sep=\\, col sep=&]{
Level & Rating \\
0 & 2.875 \\
1 & 2.954545 \\
2 & 2.571429 \\
3 & 2.888889 \\
4 & 2.923077 \\
5 & 2.684211 \\
6 & 2.8125 \\
7 & 3.043478 \\
8 & 3.611111 \\
9 & 1.9375 \\
10 & 2.833333 \\
11 & 2.3125 \\
12 & 1.666667 \\
13 & 2.684211 \\
14 & 2.6 \\
15 & 2.75 \\
16 & 2.578947 \\
17 & 3.333333 \\
18 & 2.333333 \\
19 & 3 \\
20 & 3.3 \\
21 & 3.842105 \\
22 & 2.916667 \\
23 & 2.380952 \\
24 & 1.933333 \\
25 & 2.6 \\
26 & 3.047619 \\
27 & 2.833333 \\
28 & 2.047619 \\
29 & 2.421053 \\
}\mydata
\begin{tikzpicture}
\begin{axis}[
ybar, bar width=1.0,
xtick={0,5,...,30},
minor x tick num=4, % major divisions divided in 5 minor ones
]
\addplot table[x=Level, y=Rating]{\mydata};
\end{axis}
\end{tikzpicture}
\end{document}