给定文件中的一些数据,我想使用前两列作为坐标,后两列作为每个点的标签。数据以以下形式给出:
x y labela labelb
1.416197036356566059e+02 5.144315570548267715e+03 7.000000000000000000e+00 1.000000000000000000e+00
我使用table
命令将前两列读取为数据:
\begin{tikzpicture}
\begin{axis}
\addplot+[only marks,x=x, y=y, ] table {DataTable.dat};
\end{axis}
\end{tikzpicture}
第二列的数据应该以简单文本的形式出现在每个散点上方,或者可能出现在这样的气泡中:labela / labelb
。
一个有希望的选项似乎是nodes near coords
我用来显示其他图中点的 y 坐标的选项,但我不知道如何使用文件中的数据并将其与之结合起来。
答案1
nodes near coords
是正确的方法。您可以使用键在标签节点内使两个标签列可用visualization depends on=\thisrow{<column name>} \as \<macro name>
。您可以根据需要随时调用该键。
然后,您可以使用 对标签进行排版nodes near coords=\pgfmathprintnumber{\<macronameA>} / \pgfmathprintnumber{\<macronameB>}
。可以使用 设置标签节点的样式every node near coord/.append style=<styles>
。
请注意,标签节点不会自动增加轴限值,因此它们可能会与轴重叠。在这种情况下,您需要使用enlargelimits
或enlarge y limits
。
\documentclass{article}
\usepackage{pgfplots}
\begin{filecontents}{DataTable.dat}
x y labela labelb
1.416197036356566059e+02 5.144315570548267715e+03 7.000000000000000000e+00 1.000000000000000000e+00
2.416197036356566059e+02 3.144315570548267715e+03 8.000000000000000000e+00 4.000000000000000000e+00
4.416197036356566059e+02 1.144315570548267715e+03 6.000000000000000000e+00 2.000000000000000000e+00
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[enlarge y limits={upper,value=0.3}]
\addplot+[
only marks,
visualization depends on=\thisrow{labela} \as \labela,
visualization depends on=\thisrow{labelb} \as \labelb,
nodes near coords=\pgfmathprintnumber{\labela}/\pgfmathprintnumber{\labelb},
every node near coord/.append style={
black,
draw,
circle,
inner sep=1pt,
yshift=1ex
}
] table {DataTable.dat};
\end{axis}
\end{tikzpicture}
\end{document}