我正在尝试使用 pgfplots 绘制一些区间,并希望使用自定义标记来表示上限和下限。我计划使用“V”表示上限,使用“^”表示下限(理想情况下不是字母,而是看起来像 X 的上半部分和下半部分的符号)。这里的想法是,对于空区间,两个符号将合并为一个 X。
我想我可以得到像那些这样的符号,text mark={v}
但是对齐会偏离,因为 pgfplots 会将标记居中而不是使用“v”的尖端作为基线。
你知道怎样才能正确对齐吗?
答案1
PGFPlots 可以使用 pgf 中定义的任何绘图标记。您可能想要研究pgflibraryplotmarks.code.tex
(随 pgf 一起提供)并相应地定义一个标记。
对齐很简单:绘制绘图标记时,原点 (0pt,0pt) 是标记位置。只需确保您的 V 有 y>0pt 且 ^ 有 y < 0pt,仅此而已。
答案2
在查看 pgfplots 源代码后,我找到了解决方案。通过以下定义,我得到了我想要的绘图标记
\pgfdeclareplotmark{v}{%
\pgfpathmoveto{\pgfpoint{-\pgfplotmarksize}{\pgfplotmarksize}}
\pgfpathlineto{\pgfpoint{0pt}{0pt}}
\pgfpathlineto{\pgfpoint{\pgfplotmarksize}{\pgfplotmarksize}}
\pgfusepathqstroke
}
\pgfdeclareplotmark{^}{%
\pgfpathmoveto{\pgfpoint{-\pgfplotmarksize}{-\pgfplotmarksize}}
\pgfpathlineto{\pgfpoint{0pt}{0pt}}
\pgfpathlineto{\pgfpoint{\pgfplotmarksize}{-\pgfplotmarksize}}
\pgfusepathqstroke
}
定义后,这些标记可以像其他标记一样使用,例如
\addplot[only marks, mark=^] coordinates { (0,0) }
\addplot[only marks, mark=v] coordinates { (0,1) }
\addplot[mark=none] coordinates { (0,0) (0,1) }