我有一个散点图,它是根据以逗号分隔格式存储的一些数据生成的。我需要为每个点添加一个标签:此信息可作为文件的一部分使用,.csv
因为它用作行标签。目前,我的方法是自动绘制点,但手动添加标签:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.csv}
Label,x,y,angle
a,1,1,0
b,2,2.5,0
c,3,2.9,0
d,4,4.1,-90
\end{filecontents*}
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table
[col sep = comma, x = x, y = y] {\jobname.csv};
\node[pin = a] at (axis cs:1,1) {};
\node[pin = b] at (axis cs:2,2.5) {};
\node[pin = c] at (axis cs:3,2.9) {};
\node[pin = -90:d] at (axis cs:4,4.1) {};
\end{axis}
\end{tikzpicture}
\end{document}
显然这不是很有效:理想情况下,我想从存储表中读取信息。这需要某种形式的映射,但从文档来看,pgfplots(table)
似乎缺少一个逐行函数来执行此操作。
是否可以编写一个(相对简单的)映射来添加节点,拾取X和是值加上文件中的标签和角度(或者可能是更宽的“引脚修改”).csv
?我的桌子不太长:最多大约十几行。
答案1
point meta = explicit symbolic
您可以使用选项中的\addplot
和选项meta = Label
中的标签table
。可以使用提供角度visualization depends on = \thisrow{Angle} \as \angle
。然后,您可以使用创建图钉nodes near coords
:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.csv}
Label,x,y,angle
a,1,1,90
b,2,2.5,90
c,3,2.9,90
d,4,4.1,-90
\end{filecontents*}
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[visualization depends on = \thisrow{angle} \as \angle]
\addplot +[
nodes near coords=,
point meta = explicit symbolic,
every node near coord/.style = {
anchor = center, pin = {\angle:\pgfplotspointmeta}
}
] table
[col sep = comma, x = x, y = y, meta = Label
] {\jobname.csv};
\end{axis}
\end{tikzpicture}
\end{document}