Given some data from a file, I would like to use the first two columns as coordinates, and the second two columns as label for every point. The data is given in this form:

x                        y                        labela                   labelb
1.416197036356566059e+02 5.144315570548267715e+03 7.000000000000000000e+00 1.000000000000000000e+00

I use the table command to read the first two columns as data:

        \addplot+[only marks,x=x, y=y, ] table {DataTable.dat};

The data of the second column should appear above each scatter point as simple text or may be in a bubble like this: labela / labelb.

A promising option seems to be the option nodes near coords which I use to show the y-coordinate of points in other plots, but I don't see how I can use the data from the file and combine it with that.


nodes near coords is the right approach. You can make your two label columns available inside the label nodes using the key visualization depends on=\thisrow{<column name>} \as \<macro name>. The key can be called as often as you like.

Then, you can typeset the labels using nodes near coords=\pgfmathprintnumber{\<macronameA>} / \pgfmathprintnumber{\<macronameB>}. The styles for the label nodes can be set using every node near coord/.append style=<styles>.

Note that the label nodes will not automatically increase the axis limits, so they might overlap the axes. In that case, you'll need to use enlargelimits or enlarge y limits.



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
    \begin{axis}[enlarge y limits={upper,value=0.3}]
            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={
                inner sep=1pt,
            ] table {DataTable.dat};

  • Excellent, this works almost perfectly. Only, have you any idea how to change the style of the labels? If I do every node near coord/.append style={font={\tiny}} it changes only the size of the divisor symbol /, but the font size of \labela and \labelb remains unchanged. – Ingo Apr 16 '12 at 7:48
  • @tehingo: I can't reproduce that, both the labels and the divisor symbol are reduced in size if I add the key. Can you edit your question to show your code and output? – Jake Apr 16 '12 at 10:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.