我可以使用以下内容来获取一个图,其中某一列的值作为图中的标记。
\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}