表中值的文本标记

表中值的文本标记

我可以使用以下内容来获取一个图,其中某一列的值作为图中的标记。

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread[col sep=comma]{
  a,b,c
  1,1,bob
  2,2,joe
  3,3,fred
  }\data
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    scatter,
    only marks,
    point meta=explicit symbolic,
    scatter/classes={
      bob={mark=text, /pgf/text mark={bob}},
      joe={mark=text, /pgf/text mark={joe}},
      fred={mark=text, /pgf/text mark={fred}}
    }]
    \addplot+ table [x=a,y=b,meta=c]{\data};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

输入所有scatter/classes={...}代码效率不高,而且对于大量数据来说也不可行。有没有更好的方法?

答案1

或者直接使用nodes near coords,将其对齐设置为center,然后使用删除标记mark=none

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread[col sep=comma]{
  a,b,c
  1,1,bob
  2,2,joe
  3,3,fred
  }\data
\begin{document}
\begin{tikzpicture}
  \begin{axis}[
    scatter,
    only marks,
    point meta=explicit symbolic,
    nodes near coords,
    nodes near coords align=center
]
    \addplot+ [mark=none] table [x=a,y=b,meta=c]{\data};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

这产生了期望的结果。

您必须清除nodes near coords以防止将 c 列解析为数字。必须将标记的选项提供给\addplot,因为如果没有选项,则会设置一些默认值。并且 c 列的内容存储在 中\pgfplotspointmeta,可以将其作为 的参数给出text mark

\documentclass{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotstableread[col sep=comma]{
  a,b,c
  1,1,bob
  2,2,joe
  3,3,fred
  }\data
\begin{document}
\begin{tikzpicture}
  \begin{axis}[scatter,
        nodes near coords=, % clear it, otherwise column c will be treated as number
        point meta=explicit symbolic,
  ]
  \addplot+[only marks,mark=text,   % marks must be set here to overwrite default settings
      text mark=\pgfplotspointmeta, % contains the text
  ] table [x=a,y=b,meta=c]{\data};
  \end{axis}
\end{tikzpicture}
\end{document}

相关内容