使用 \pgfplotsinvokeforeach 绘制条形图组

使用 \pgfplotsinvokeforeach 绘制条形图组

我正在\pgfplotsinvokeforeach尝试在条形图上绘制 2 个系列。这是先决条件,我无法更改它(因为这是一个更大项目的一部分)。

但是,由于我每个条形图使用 1 个addplot命令,因此 Tikz 认为有 4 个不同的系列(刻度线前 2 个橙色,刻度线后 2 个紫色)。

MWE 输出

我怎样才能避免这种行为?

我想要仅有的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}

两个相同的条形图

相关内容