pgfplots:轴上的刻度标记,中间有填充

pgfplots:轴上的刻度标记,中间有填充

我正在绘制一个图形,并使用fill between类似以下示例的方法为其下方的某些区域着色:

\documentclass{article}

\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{compat=newest}    

\begin{document}

\begin{tikzpicture}

\begin{axis}[
xmin = 0,
xmax = 7,
ymin = 0,
ymax = 30]
\addplot+[name path=A,domain=0:6] {x^2};
\path[name path=B]
(\pgfkeysvalueof{/pgfplots/xmin},0) --
(\pgfkeysvalueof{/pgfplots/xmax},0);
\addplot[lightgray] fill between[of=A and B, soft clip={domain=1:5}];
\end{axis}

\end{tikzpicture}

\end{document}

这使:

在此处输入图片描述

在示例中,x 轴的刻度标记隐藏在填充区域的后面,因此我使用通常的方法axis on top

\documentclass{article}

\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{compat=newest}    

\begin{document}

\begin{tikzpicture}

\begin{axis}[
xmin = 0,
xmax = 7,
ymin = 0,
ymax = 30,
axis on top]
\addplot+[name path=A,domain=0:6] {x^2};
\path[name path=B]
(\pgfkeysvalueof{/pgfplots/xmin},0) --
(\pgfkeysvalueof{/pgfplots/xmax},0);
\addplot[lightgray] fill between[of=A and B, soft clip={domain=1:5}];
\end{axis}

\end{tikzpicture}

\end{document}

这样就可以根据需要将刻度线移到最前面,但也有一个副作用:

在此处输入图片描述

请注意,第二张图片中的刻度标记位于轴上方:

在此处输入图片描述

axis on top只有在与一起使用时才会出现这种情况fill between。如何才能让刻度线绘制在填充上方,但仍在轴下方?

答案1

新答案

您观察到的行为被认为是漏洞PGFPlots v1.14 版现已修复此问题。axis on top现在对您的示例进行 TeXing 可得到此结果(希望是理想的结果)。

该图显示了 <code>axis on top</code> 示例的结果

旧答案

正如 percusse 所说他的评论您可以使用该set layers功能并将填充区域移动到您喜欢的任何图层。下面是一个示例,您可以演示一下当您使用结果图像更改图层时会发生什么。

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
    \usetikzlibrary{
        pgfplots.fillbetween,
    }
    \pgfplotsset{compat=1.13}
\begin{document}
    \begin{tikzpicture}[
        fill between/on layer={
%            axis background    % grid and ticks will be above filled area
            axis grid           % only ticks will be above filled area
%            axis ticks         % grid and ticks will be below filled area
%            pre main           % <-- initial value
        },
    ]
        \begin{axis}[
            xmin=0,
            xmax=7,
            ymin=0,
            ymax=30,
            grid=major,
        ]
            \addplot+[name path=A,domain=0:6] {x^2};
            \path[name path=B]
                (\pgfkeysvalueof{/pgfplots/xmin},0) --
                (\pgfkeysvalueof{/pgfplots/xmax},0);
            \addplot[red!10] fill between
                [of=A and B, soft clip={domain=1:5}];

            \coordinate (point to spy) at (1,0);
            \coordinate (show magnification) at (2,20);
        \end{axis}
    \end{tikzpicture}
\end{document}

该图显示了上述代码的结果

答案2

通常这不应该发生。从第 381 页的文档中可以看出axis on top

请注意,此功能不会影响绘图标记。我认为如果绘图标记与轴描述相交,会显得不自然。

所以这个库似乎有一个错误fillbetween。作为解决方法,你可以不是使用它并以不同的方式创建填充。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}    

\begin{document}

\begin{tikzpicture}
\begin{axis}[
xmin = 0,
xmax = 7,
ymin = 0,
ymax = 30,
axis on top]
\addplot[fill, lightgray, domain=1:5] {x^2} \closedcycle;
\addplot+[domain=0:6] {x^2};
\end{axis}
\end{tikzpicture}

\end{document}

输出:

阴谋

相关内容