4
votes

It is straightforward to label data points in Gnuplot, in this example, I use the third column as labels for this data set (data.txt):

 1 -22 "Event 0"
 2 -139.7 "Event 3"
 3 -11 "Event 7"
 4 -35.2 "Event 6"
 5 -139.7 "Event 2"
 6 -139.7 "Event 4"
 7 -84.7 "Event 1"
 8 -22 "Event 9"
 9 -64.9 "Event 8"
 10 -38.5 "Event 5"

gnuplot> plot 'data.txt' u 1:2, "" u 1:2:3 w labels rotate offset 1

This is the result (I omitted polishing for this purpose): enter image description here

However, I need the data points plotted by cumulative sum:

gnuplot> plot 'data.txt' u 1:2 smooth cumulative

enter image description here

Now, how can I label the points at their new "coordinates"? Something like this does not work (I want the labels down in each knee of the cumulative curve):

gnuplot> plot 'data.txt' u 1:2 s cum, "" u 1:2:3 s cum w labels offset 1

enter image description here

The result should look something like this (here manually cut and positioned with Gimp): enter image description here

1
Please post a sample of your data. In particular, it would be helpful to know what your labels look like. The way to do this will depend very much on what those look like. - Matthew
I agree with @Matthew: with what you write, it's impossible to guess how you resolve which label is printed next to a cumulated point. - Joce
Sorry, now I have tried to explain it more in detail and with a small example (not my real use case but 1:1 transferable from Gnuplot). - smartmic
Can you provide an example of what you want? Just use a graphics editing program to draw the labels on the cumulative curve (second graph) to show how you want them to end up. - Matthew
@smartmic My answer should work. The original solution I posted did not work but I wasn't able to test it because you didn't post your data. As others have requested above, in the future make sure to attach data that allows other users to reproduce your problem, it makes much easier for us to test solutions. - Miguel

1 Answers

1
votes

You can plot your cumulative graph to a file, and then use those modified data as you would with a regular data file. To access the labels to can use the paste command and make use of extra columns:

set table "cumulative_labels"
plot 'data.txt' u 1:2:3 smooth cumulative w labels
set table "cumulative_data"
plot 'data.txt' u 1:2 smooth cumulative
unset table
plot 'cumulative_data' u 1:2 w l, \
"< paste cumulative_labels cumulative_data" u 4:5:3 w labels offset 1

Edit:

gnuplot-only way to do this, with no intermediate files, but dropping the smooth cumulative option:

sum = 0.
plot "data.txt" u 1:2 s cum, "" u (sum = sum + $2, $1):(sum):3 w labels offset 1