pgfplots 中的剪辑标记-奇怪的行为?

pgfplots 中的剪辑标记-奇怪的行为?

我正在尝试绘制手动定义的标记(几条条纹),但似乎无法裁剪图(在两个维度上都裁剪为 [-.5,.5])。我甚至无法理解pgfplots这里的效果。

我的 (n)MWE 是

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{filecontents}{pgfplots-plot-limits.dat}
X    Y    color
0    0    1
-0.5    0    0
\end{filecontents}

\begin{document}
    \begin{tikzpicture}
        \pgfdeclareplotmark{thiscube}{\draw[ultra thin, fill] (0.23438,-0.5) -- (0.26562,-0.5) -- (-0.23438,0.5) -- (-0.26562,0.5);}
        \begin{axis}[colormap/hot,
            xmin=-0.5, xmax=0.5, ymin=-0.5, ymax=0.5,
            axis equal,clip=true,xtick=\empty, ytick=\empty,hide axis
        ]
        \pgfplotsextra{\clip (axis cs:-0.5,-0.5) rectangle (axis cs:0.5,0.5);}
        \addplot+[scatter,scatter src=explicit,mark=thiscube,only marks]
            table [x=X,y=Y,meta=color] {pgfplots-plot-limits.dat};
        \draw[thick,blue] (axis cs:-0.5,-0.5) rectangle (axis cs:0.5,0.5);
        \end{axis}
    \end{tikzpicture}
\end{document}

我首先删除第二个数据项-0.5 0 1以简化操作。然后应在 中绘制标记(一个横跨 ymin-ymax 范围的小平行四面体),0 0但结果却是( 中的最后一行axis只是一个小助手,指示原始 x 和 y 范围): 在此处输入图片描述

但是,如果我删除(注释掉)该行,xmin=-0.5, xmax=0.5, ymin=-0.5, ymax=0.5,结果看起来不错(但是物理尺寸似乎发生了很大变化):

在此处输入图片描述

但是,我无法裁剪这些。添加第二个数据项(相同的平行线移位到这些;连同轴和第二个数据项,我获得

在此处输入图片描述

正如之前一样,我对以下内容感到疑惑(在这里会变得更加清楚):

  1. 为什么我的 pgfplotsextra 没有按预期剪辑?
  2. 为什么我的标记偏移了?红色标记(在图片中,0,0数据项没有居中(0,0)(这是我所期望的标记),而是位于(.5,.5)
  3. 如果定位正确,clip marker paths=true应该可以工作 - 就像提到的那样这里;我怎样才能正确定位它们?

是的,剪辑之后第二个数据项应该只剩下很小的一部分,这是预料之中的。

答案1

可以在轴环境之外应用裁剪。这意味着使用widthheightscale only axis=true将绘图的大小与裁剪矩形的大小相匹配。

(rel axis cs: ...) 的原点位于左下角,(1,1) 位于右上角,这对于标记定义来说非常适合。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{filecontents}{pgfplots-plot-limits.dat}
X    Y    color
0    0    1
-0.5    0    0
\end{filecontents}

\def\axisdim{2cm}% adjustable size

\begin{document}
    \begin{tikzpicture}
      \clip (0,0) rectangle (\axisdim,\axisdim);
      \pgfdeclareplotmark{thiscube}{\draw[ultra thin, fill] (rel axis cs: 0.23438,-0.5) -- (rel axis cs: 0.26562,-0.5) --
        (rel axis cs:-0.23438,0.5) -- (rel axis cs: -0.26562,0.5);}
      \begin{axis}[colormap/hot,width=\axisdim,height=\axisdim,scale only axis=true,
            xmin=-0.5, xmax=0.5, ymin=-0.5, ymax=0.5,
            axis equal,xtick=\empty, ytick=\empty,hide axis
        ]
        \addplot+[scatter,scatter src=explicit,mark=thiscube,only marks]
            table [x=X,y=Y,meta=color] {pgfplots-plot-limits.dat};
        \pgfplotsextra{\draw[thick,blue] (axis cs:-0.5,-0.5) rectangle (axis cs:0.5,0.5);}
        \end{axis}
    \end{tikzpicture}
\end{document}

演示

相关内容