![解决方案 1:](https://linux22.com/image/287488/%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%201%EF%BC%9A.png)
我有两个表,它们保存相同 x 值的不同值。为了比较它们,我想将它们绘制在同一张图中,但使用不同的 xlabel。
表格应该保持不变,即我不想更改表格中的 x 值,因为它们也用于其他图。
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
xtick=data]
\addplot table {
1 1
};
\addplot table {
1 2
};
\end{axis}
\end{tikzpicture}
\end{document}
此代码生成以下图像:
然而我想要的是这样的:
我以为可能会有一个简单的选择addplot[x label=A]
,但到目前为止我还没有找到任何东西。我尝试过的方法:
xticklabels={A, B}
- 由于 x 值相同,因此只打印第一个标签。我们显然需要一些东西来告诉 pgfplots x 值不一样。xticklabel={\pgfmathparse{\labelnames[Mod(\tick,2)]}\pgfmathresult}
其中\def\labelnames{{"A", "B"}}
- 同样的问题,刻度没有改变。symbolic x coords={A, B}
- 不起作用,因为 x 值未命名为 A 和 B。
答案1
像这样?
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10,width=7cm} %% better add this
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar=-7pt, %% adjusted to make the bar be at the center of tick
bar width=7pt, %% adjusted to make the bar be at the center of tick
enlargelimits=0.15, %% my habit
ylabel={}, %% Add yours
symbolic x coords={A,B}, %% Coordinates
xtick={A,B}, %% ticks
]
\addplot coordinates {(A,1)};
\addplot coordinates {(B,2)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
如何x
使用 向值添加一些内容x expr
?这样,数据将保持不变,但条形图会偏移,并且可以有自己的刻度标签。
解决方案 1:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
ybar=-7pt, %% Harish's answer.
bar width=7pt, %% Harish's answer.
xtick={1,2,3},
]
\addplot table[x expr=\thisrowno{0}+0] {% Add 0 to x.
1 1
};
\addplot table[x expr=\thisrowno{0}+1] {% Add 1 to x.
1 2
};
\addplot table[x expr=\thisrowno{0}+2] {% Add 2 to x.
1 1
};
\end{axis}
\end{tikzpicture}
\end{document}
输出
您可以立即看到 的使用存在某种模式\addplot
。也许您可以使用类似以下方法概括多列数据:
解决方案 2:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
xtick={1,...,6},
ybar=-7pt, %% Harish's answer.
bar width=7pt, %% Harish's answer.
]
\pgfplotsinvokeforeach{1,...,6}{%
\addplot table[row sep=crcr,x expr=\thisrowno{0}-1+#1, y index=#1] {
1 1 2 3 3 2 1\\
};
}
\end{axis}
\end{tikzpicture}
\end{document}
输出:
答案3
\documentclass{standalone}
\usepackage[english]{babel}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar=-7pt, %% Harish's answer
bar width=7pt, %% Harish's answer
xtick={1, 2}, %% sudosensei's answer
xticklabels={A, B}, %% sudosensei's comment
]
\addplot table[x expr=\thisrowno{0}+0] {% Add 0 to x.
1 1
};
\addplot table[x expr=\thisrowno{0}+1] {% Add 1 to x.
1 2
};
\end{axis}
\end{tikzpicture}
\end{document}
这将得到期望的结果: