作为这问题,我正在处理绘制某些标记的问题。John Kormylo 的解决方案对于该问题中呈现的 MWE 非常有效。在这里,我想通过另外两个数据项扩展该图,即
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{filecontents}{pgfplots-plot-limits.dat}
X Y color
0 0 0
0.45 0 1
0.5 0 2
0.55 0 3
\end{filecontents}%
\def\axisdim{6cm}% 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}
这看起来是个不错的解决方案,标记大小合适,第一个标记位于中间(x=0
),右边两个标记是X=0.45
和X=0.5
。但是,在最后一个标记上方,应该存在另一个标记(与倒数第二个标记的距离相同),即X=0.55
。它没有被绘制,因为其原点位于 指定的范围之外,尽管xmin,xmax,ymin,ymax
标记到达了该范围。
扩大范围会(遗憾地)增加相对明确的标记,这是我不想要的(是否clip
仍然有效,我还没有检查)。
有没有办法禁用此限制,以便 pgfplots 绘制指定范围之外的标记?或者是否有其他解决方案来绘制最后一个数据点?那就太好了。
答案1
一个可行的解决方案是扩展轴限制(根据先前的知识,我知道我的标记不会超出原始边界的单位立方体,因此完整[-1,1]^2
应该足够了。裁剪需要进行调整。并且由于通过扩展限制(其相对于上述解决方案中的单位立方体定义)标记的(不必要的)缩放,我们通过基本的 pgf 命令来定义它(无论如何,这是 John Kormylo 的第一个想法)。然后 MWE 读取并
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{filecontents}{pgfplots-plot-limits.dat}
X Y color
0 0 0
0.45 0 1
0.5 0 2
0.55 0 3
\end{filecontents}%
\def\axisdim{6cm}% adjustable size
\begin{document}
\begin{tikzpicture}
\pgfdeclareplotmark{thiscube}{
\pgfpathmoveto{\pgfpointdiff{\pgfpointxy{0.23438}{-0.5}}{\pgfpointxy{0}{0}}}
\pgfpathlineto{\pgfpointdiff{\pgfpointxy{0.26562}{-0.5}}{\pgfpointxy{0}{0}}}
\pgfpathlineto{\pgfpointdiff{\pgfpointxy{-0.23438}{0.5}}{\pgfpointxy{0}{0}}}
\pgfpathlineto{\pgfpointdiff{\pgfpointxy{-0.26562}{0.5}}{\pgfpointxy{0}{0}}}
\pgfpathclose
\pgfusepath{fill}
}
\clip (.5*\axisdim,.5*\axisdim) rectangle (1.5*\axisdim,1.5*\axisdim);
\begin{axis}[colormap/hot,width=2*\axisdim,height=2*\axisdim,scale only axis=true,
xmin=-1, xmax=1, ymin=-1, ymax=1,
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}
虽然这确实有效,但还有更简单的解决方案,即禁用剪辑,但也许这种方法可能对某些人有帮助。