我在正确使用 pgfplot 时遇到了一些问题。我对 pgfplots 经验不多,在线教程和 pgfplots 手册都无法帮助我。我想要创建的图是一个包含三个不同图的条形图。第一个图仅应具有 x = 1 的 y 值,其他两个图仅应具有 2 <= x <= 32 的 y 值。我当前的 tex 代码(带有虚拟 y 值)如下:
\begin{tikzpicture}
\begin{axis}[
xlabel=x,
ylabel=y,
symbolic x coords={1,2,4,8,16,32},
xtick=data,
enlargelimits=0.05,
legend pos=north east,
ybar interval=0.7,
ymajorgrids=true,
y grid style=dashed,
]
% A
\addplot coordinates {
(1,6)
};
% B
\addplot coordinates {
(2,5) (4,4) (8,3) (16,2) (32,1)
};
% C
\addplot coordinates {
(2,5) (4,4) (8,3) (16,2) (32,1)
};
\legend{A,B,C}
\end{axis}
\end{tikzpicture}
现在,这个情节存在一些问题,我不知道如何解决。
- x 轴上没有可见的值
- “A”图不可见
- x = 32 的图完全缺失
非常感谢您的帮助!
答案1
其中大部分都与您选择使用ybar interval
而不是相关联ybar
,而这才是您应该使用的。间隔类型条形图的目的是坐标定义条形的宽度和高度。如果您有两个坐标(1,5)(3,2)
,则得到一条,宽度为 2,高度为 5。pgfplots
有关更多详细信息,请参阅手册。
这显然不是您想要做的,因此,首先要做的就是更改ybar interval
为ybar
。
此外,请注意,xtick=data
只需要第一的 \addplot
考虑到这一点,并且您的情况中第一个图只有一个 x 值,并且您只会在第一组条形中得到一个勾号。因此删除xtick=data
。
\documentclass[border=0.2cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel=x,
ylabel=y,
symbolic x coords={1,2,4,8,16,32},
ytick distance=1, % <-- added
enlarge x limits={0.15}, % <-- increased value
legend pos=north east,
ybar=0.7, % <-- no interval
ymajorgrids=true,
y grid style=dashed,
ymin=0
]
% A
\addplot coordinates {
(1,6)
};
% B
\addplot coordinates {
(2,5) (4,4) (8,3) (16,2) (32,1)
};
% C
\addplot coordinates {
(2,5) (4,4) (8,3) (16,2) (32,1)
};
\legend{A,B,C}
\end{axis}
\end{tikzpicture}
\end{document}