是否可以将axis on top
和网格都放在图的最底部(或位于其他平面/线/...之间的某处)?
示例图,axis on top=true
但顶部的网格很丑陋:
带有示例图axis on top=false
和网格的黄色平面后面看起来不错,但轴和箭头在图形后面看起来很糟糕。
这是一个很小的代码示例
\documentclass{article} \usepackage{pgfplots}
\begin{document} \begin{tikzpicture}
\begin{axis}[grid=major,axis x line=bottom,axis y line=left] %axis on top
\addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
\end{axis}
\end{tikzpicture} \end{document}
有人能把轴放在顶部而不把网格放在顶部吗?
答案1
在其他所有操作完成后,我们可以在此处使用after end axis/.code
键重新绘制轴线。绘制轴(以及网格线、刻度标记和刻度标签)的宏是内部宏pgfplots@draw@axis
,因此我们需要@
先分配一个不带 的新名称来使其可用。然后我们可以定义一种新样式,该样式最初将轴线、刻度标记和刻度标签设置为透明,并使用after end axis/.code
重置不透明度,隐藏网格并调用pgfplots@draw@axis
。
这乍一看有点吓人,但一旦axis lines on top
定义了样式,你在轴上所要做的就是使用该样式。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\makeatletter \newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis} \makeatother
\pgfplotsset{axis line on top/.style={
axis line style=transparent,
ticklabel style=transparent,
tick style=transparent,
axis on top=false,
after end axis/.append code={
\pgfplotsset{axis line style=opaque,
ticklabel style=opaque,
tick style=opaque,
grid=none}
\pgfplotsdrawaxis}
}
}
\begin{tikzpicture}
\begin{axis}[grid=major,axis x line=bottom,axis y line=left,axis line on top]
\addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}
答案2
好吧,您可以绘制两次,第一次使用网格,第二次不使用网格,但轴在顶部。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[grid=major,enlargelimits=false]
\addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
\end{axis}
\begin{axis}[axis on top=true,enlargelimits=false]
\addplot+[mark=none,fill=yellow,draw=red] {0.1*x^2} \closedcycle;
\end{axis}
\end{tikzpicture}
\end{document}
我希望还有其他方法,因为这需要绘图两次,但据我所知,似乎没有简单的方法将轴与网格分开,但由于我是新手,我很容易出错pgfplots
。
不过,在关键时刻,我认为这会产生你想要的结果。