pgfplots 中自定义标记的基线

pgfplots 中自定义标记的基线

我正在尝试使用 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) }

相关内容