pgfplots:绘制单点时出现图层问题

pgfplots:绘制单点时出现图层问题

我遇到了一个问题,绘制单个点不尊重用户定义的图层。请采取以下 MWE:

\documentclass{standalone}

\usepackage{pgfplots}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}

\pgfplotsset{
  compat=newest,
  % define the layers you need.
  % (Don't forget to add `main' somewhere in that list!!)
  layers/my layer set/.define layer set={
      back,
      main,
      fore
  }{
  % you could state styles here which should be moved to
  % corresponding layers, but that is not necessary here.
  % That is why we don't state anything here
  },
  % activate the newly created layer set
  set layers=my layer set,
}

\begin{filecontents*}{data1.dat}
0 0
0 1
\end{filecontents*}

\begin{filecontents*}{data2.dat}
-0.5 0.5
 0.5 0.5
\end{filecontents*}

\begin{filecontents*}{data3.dat}
0 0.5
\end{filecontents*}

\begin{document}
\begin{tikzpicture}
\begin{axis}

\addplot[draw=black,on layer=back] plot[] file {data1.dat};
\addplot[draw=black,mark=*,on layer=back] plot[] file {data3.dat};
\addplot[draw=red,on layer=main] plot[] file {data2.dat};

\end{axis}
\end{tikzpicture}
\end{document}

层定义遵循以下答案:这个问题。简单来说,我在背景层画一条垂直黑线,在主层画一条水平红线,然后在背景层两条线的交叉处添加一个黑点。然而,我得到的是这样的(放大):

在此处输入图片描述

除非我误解了关于图层的一些基本知识或它们是如何定义的,否则这是错误的,因为红线应该在顶部。有趣的是,如果我更改以下命令

\addplot[draw=red,on layer=main] plot[] file {data2.dat};

使用“前”层(即“后”层上方的两个层),

\addplot[draw=red,on layer=fore] plot[] file {data2.dat};

然后它就可以正常工作了:

在此处输入图片描述

是我做错了什么还是这是一个错误?

答案1

标记在 PGFPlots 中表现得有点特殊,因为它们不一定遵循相关图的图层。但您可以使用mark layer=like plot相关\addplot宏上的选项强制它们这样做:

\documentclass{standalone}

\usepackage{pgfplots}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}

\pgfplotsset{
  compat=newest,
  % define the layers you need.
  % (Don't forget to add `main' somewhere in that list!!)
  layers/my layer set/.define layer set={
      back,
      main,
      fore
  }{
  % you could state styles here which should be moved to
  % corresponding layers, but that is not necessary here.
  % That is why we don't state anything here
  },
  % activate the newly created layer set
  set layers=my layer set,
}

\begin{filecontents*}{data1.dat}
0 0
0 1
\end{filecontents*}

\begin{filecontents*}{data2.dat}
-0.5 0.5
 0.5 0.5
\end{filecontents*}

\begin{filecontents*}{data3.dat}
0 0.5
\end{filecontents*}

\begin{document}
\begin{tikzpicture}
\begin{axis}

\addplot[draw=black,on layer=back] plot[] file {data1.dat};
\addplot[draw=black,mark=*,on layer=back,mark layer=like plot] plot[] file {data3.dat};
\addplot[draw=red,on layer=main] plot[] file {data2.dat};

\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

让我试着解释一下标记是怎么回事:就我理解手册中的相关部分而言,问题在于标记默认位于其他图上方的单独层上。该选项clip mode通常设置为global,这意味着所有图都在边界处被剪裁。但是,标记的行为不同(至少如果clip marker paths设置为false默认值)。PGFlots 手册状态(在 2.20.2 节“剪辑”中,项目/pgfplots/clip mode=global|individual):

为了避免剪切标记路径,任何标记都会在剪切路径关闭后进行处理,即在单独的图层上。

因此,标记位于图的上方,甚至位于在其所属图之后绘制的图的上方。默认选项mark layer=auto代表此默认行为,但您可以覆盖它并明确说明应在哪个层上绘制标记(或使用该值将标记附加到图的层like plot)。

相关内容