我正在\pgfplotsinvokeforeach
尝试在条形图上绘制 2 个系列。这是先决条件,我无法更改它(因为这是一个更大项目的一部分)。
但是,由于我每个条形图使用 1 个addplot
命令,因此 Tikz 认为有 4 个不同的系列(刻度线前 2 个橙色,刻度线后 2 个紫色)。
我怎样才能避免这种行为?
我想要仅有的2 个系列,但由 2 个绘制\pgfplotsinvokeforeach
......
以下是我正在做的事情:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgffor}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
title = Current Situation,
axis on top,
axis x line*=bottom,
axis y line=none,
ybar=.5cm,
enlarge x limits=0.25,
nodes near coords,
nodes near coords align={vertical},
xtick={1,2}
]
\pgfplotsinvokeforeach{1,...,2}{%
\addplot[draw=orange, fill=orange] coordinates {(#1, #1)};
}%
\pgfplotsinvokeforeach{1,...,2}{%
\addplot[draw=purple, fill=purple] coordinates {(#1, 2*#1)};
}%
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[
title = Expected Behavior,
axis on top,
axis x line*=bottom,
axis y line=none,
ybar=.5cm,
enlarge x limits=0.25,
nodes near coords,
nodes near coords align={vertical},
xtick={1,2}
]
\addplot[draw=orange, fill=orange] coordinates {(1, 1) (2, 2)};
\addplot[draw=purple, fill=purple] coordinates {(1, 2) (2, 4)};
\end{axis}
\end{tikzpicture}
\end{document}
总结一下情况:
- 我希望
\pgfplotsinvokeforeach
每个系列绘制 1 个(在我的示例中为 2 个) - 每个系列都被 Tike 理解为一个系列,重现了第二张图的布局。
答案1
您可以明确设置,而不必依赖自动换档bar shift
。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgffor}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
title = Current Situation,
axis on top,
axis x line*=bottom,
axis y line=none,
ybar=.5cm,
enlarge x limits=0.25,
nodes near coords,
nodes near coords align={vertical},
xtick={1,2},
]
\pgfplotsinvokeforeach{1,...,2}{%
\addplot[draw=orange, fill=orange, bar shift=-12 pt] coordinates {(#1, #1)};
}%
\pgfplotsinvokeforeach{1,...,2}{%
\addplot[draw=purple, fill=purple, bar shift=12 pt] coordinates {(#1, 2*#1)};
}%
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[
title = Expected Behavior,
axis on top,
axis x line*=bottom,
axis y line=none,
ybar=.5cm,
enlarge x limits=0.25,
nodes near coords,
nodes near coords align={vertical},
xtick={1,2}
]
\addplot[draw=orange, fill=orange] coordinates {(1, 1) (2, 2)};
\addplot[draw=purple, fill=purple] coordinates {(1, 2) (2, 4)};
\end{axis}
\end{tikzpicture}
\end{document}