`compat = 1.10`、`compat = 1.11` 和 `fillbetween` 之间的交互

`compat = 1.10`、`compat = 1.11` 和 `fillbetween` 之间的交互

这篇文章是对以下文章评论中讨论的延续邮政

以下代码运行良好,但如果我更改为,compat = 1.10阴影就会消失。我很好奇为什么?注释也会%\pgfplotsset{compat=1.11}删除阴影。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns}

\begin{document}


  \begin{tikzpicture}
    \begin{axis}[
        xmin=-1, xmax=3,
        ymin=-1, ymax=3,
        axis lines=middle,
      ]  
      \addplot [gray, name path = A] coordinates {(0, 1) (1, 1)};

      \path[name path=xaxis] (\pgfkeysvalueof{/pgfplots/xmin}, 0) -- (\pgfkeysvalueof{/pgfplots/xmax},0);

      \addplot[gray, pattern=north west lines] fill between[of=A and xaxis, soft clip={domain=1/2:1}];

    \end{axis}
  \end{tikzpicture}


\end{document}

答案1

正如我在最后一条评论中提到的,与compat=1.11一起使用的坐标\draw(以及其他“常规”TikZ 绘图命令,包括\path)将被视为轴坐标。而与1.10则不是。

因此,如果您有设置或者根本没有设置,\path[name path=xaxis] (\pgfkeysvalueof{/pgfplots/xmin}, 0) -- (\pgfkeysvalueof{/pgfplots/xmax},0);路径实际上就不会沿着 x 轴运行。compat=1.10compat

如果你改为

\path[name path=xaxis] (axis cs:\pgfkeysvalueof{/pgfplots/xmin}, 0) -- (axis cs:\pgfkeysvalueof{/pgfplots/xmax},0);

切换到轴坐标系是明确的,无论如何compat设置它都会按预期工作。

下面是一个完整的示例,展示了两者的区别。带有 的线为蓝线axis cs,不带有 的线为红线。您可以在此屏幕截图的左下角看到红线。

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{patterns}

\begin{document}


  \begin{tikzpicture}
    \begin{axis}[
        xmin=-1, xmax=3,
        ymin=-1, ymax=3,
        axis lines=middle,
        clip=false % added just for this example
      ]  
      \addplot [gray, name path = A] coordinates {(0, 1) (1, 1)};

      % here we use axis cs:, so it works
      \draw[blue, ultra thick, name path=xaxis] (axis cs:\pgfkeysvalueof{/pgfplots/xmin}, 0) -- (axis cs:\pgfkeysvalueof{/pgfplots/xmax},0);

      % here we don't, so it doesn't work (in the way you expected)
      \draw[red, ultra thick] (\pgfkeysvalueof{/pgfplots/xmin}, 0) -- (\pgfkeysvalueof{/pgfplots/xmax},0);


      \addplot[gray, pattern=north west lines] fill between[of=A and xaxis, soft clip={domain=1/2:1}];

    \end{axis}
  \end{tikzpicture}

\end{document}

相关内容