使用 PGFPlots 绘制并标记文件中的数据

使用 PGFPlots 绘制并标记文件中的数据

给定文件中的一些数据,我想使用前两列作为坐标,后两列作为每个点的标签。数据以以下形式给出:

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>

请注意,标签节点不会自动增加轴限值,因此它们可能会与轴重叠。在这种情况下,您需要使用enlargelimitsenlarge 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}

相关内容