我需要显示一个图,其背景以一定的 X 间隔绘制不同的颜色。我试过了,fill
但它覆盖了网格和 X 轴和 Y 轴上的间隔标记。我知道我可以再次绘制它们,但我希望可以定义绘制顺序并在其他一切之前绘制填充(因为它是背景)。
另外,我有很多间隔,那么有没有办法按照模式自动绘制它们(而不是为每个间隔复制粘贴代码)?
前任:
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=80,
ymin=0, ymax=50,
ymajorgrids=true,
grid style=dashed,
]
\fill[red] (0,0) rectangle (20,50);
\fill[green] (20,0) rectangle (40,50);
\fill[red] (40,0) rectangle (60,50);
\fill[green] (60,0) rectangle (80,50);
\addplot[color=blue] coordinates {(0, 34.000000) (20, 40.000000) (40, 28.000000) (60, 37.000000) (80, 45.000000)};
\end{axis}
\end{tikzpicture}
答案1
添加axis on top
选项axis
意味着轴线、刻度和网格将打印在环境内部的东西上面。
您可以使用循环稍微自动化一下填充模式。
\documentclass[border=4mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=80,
ymin=0, ymax=50,
ymajorgrids=true,
grid style=dashed,
axis on top % <--------- added
]
\pgfplotsinvokeforeach{0,40}{
\fill[red] (#1,\pgfkeysvalueof{/pgfplots/ymin}) rectangle (#1+20,\pgfkeysvalueof{/pgfplots/ymax});
\fill[green] (#1+20,\pgfkeysvalueof{/pgfplots/ymin}) rectangle (#1+40,\pgfkeysvalueof{/pgfplots/ymax});
}
\addplot[color=blue] coordinates {(0, 34.000000) (20, 40.000000) (40, 28.000000) (60, 37.000000) (80, 45.000000)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
找到了如何使用层来解决我的一个问题。在序言中:
\pgfdeclarelayer{background} % declare background layer
\pgfsetlayers{background,main} % set the order of the layers (main is the standard layer)
还有 Tikz:
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=80,
ymin=0, ymax=50,
ymajorgrids=true,
grid style=dashed,
]
\begin{pgfonlayer}{background}
\fill[red] (0,0) rectangle (20,50);
\fill[green] (20,0) rectangle (40,50);
\fill[red] (40,0) rectangle (60,50);
\fill[green] (60,0) rectangle (80,50);
\end{pgfonlayer}
\addplot[color=blue] coordinates {(0, 34.000000) (20, 40.000000) (40, 28.000000) (60, 37.000000) (80, 45.000000)};
\end{axis}
\end{tikzpicture}
现在我唯一想知道的是如何自动绘制这种图案。