我正在尝试绘制手动定义的标记(几条条纹),但似乎无法裁剪图(在两个维度上都裁剪为 [-.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,
结果看起来不错(但是物理尺寸似乎发生了很大变化):
但是,我无法裁剪这些。添加第二个数据项(相同的平行线移位到这些;连同轴和第二个数据项,我获得
正如之前一样,我对以下内容感到疑惑(在这里会变得更加清楚):
- 为什么我的 pgfplotsextra 没有按预期剪辑?
- 为什么我的标记偏移了?红色标记(在图片中,
0,0
数据项没有居中(0,0)
(这是我所期望的标记),而是位于(.5,.5)
- 如果定位正确,
clip marker paths=true
应该可以工作 - 就像提到的那样这里;我怎样才能正确定位它们?
是的,剪辑之后第二个数据项应该只剩下很小的一部分,这是预料之中的。
答案1
可以在轴环境之外应用裁剪。这意味着使用width
、height
和scale 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}