Search code examples
gnuplot

Reading gnuplot legend from csv


I've got a data.csv file which is structured like this:

n    John Smith stats     Sam Williams stats
1                23.4                   44.1
2                32.1                   33.5
3                42.0                   42.1

Currently I'm plotting with the following command in gnuplot:

plot 'data.csv' using 1:2 title 'John' with lines, '' using 1:3 title 'Sam' with lines

The question is how to retrieve first names from the first line of .csv rather than entering them manually?

In addition, is it possible to make it adjustable in case I add a column to the table, so it automatically adds another line with the appropriate title?


Solution

  • You say you have a csv file, so I assume your data file looks like this (and is saved in infile.csv):

    n,John Smith stats,Sam Williams stats
    1,23.4,44.1
    2,32.1,33.5
    3,42.0,42.1
    

    If your version of Gnuplot is recent enough, you can use columnhead as the title argument:

    echo "
      set datafile separator ','
      plot 'infile.csv' using 1:2 with lines title columnhead
    " | gnuplot --persist
    

    Or use the key option:

    echo "
      set datafile separator ','
      set key autotitle columnhead
      plot 'infile.csv' using 1:2 with lines, '' using 1:3 with lines
    " | gnuplot --persist
    

    Edit - shorten headings

    echo "
      set datafile separator ','
      set key autotitle columnhead
      plot '< sed -r \"1 s/,([^ ]+)[^,]+/,\1/g\" infile.csv' using 1:2 with lines, '' using 1:3 with lines
    " | gnuplot --persist
    

    Output:

    Plot of column 1:2 and 1:3 of infile.csv

    Note this answer to a follow-up question may also be relevant.