Reputation: 4378
My question is very simple. Suppose I have a datafile with column headers, like as follows
first second
1 1
2 1
3 6
4 9
In gnuplot how do i make it so that the datafile is plotted using the column header as axis label? e.g. by calling
plot datafile using 1:2
i get the xaxis labeled first
and the yaxis labeled second
?
edit: I do know that I can use the column header as a key entry via set key auto title column head
, however that's not quite what I'm looking for.
Upvotes: 16
Views: 10180
Reputation: 25694
Another question where people believe it can't be done with gnuplot. Here is a simple gnuplot-only solution without external tools, hence platform-independent.
Data: SO16089301.dat
first second
1 1
2 1
3 6
4 9
Script: (works with gnuplot 4.6.0, March 2012)
### extracting axes labels from datafile
reset
FILE = 'SO16089301.dat'
stats FILE u (myX=strcol(1), myY=strcol(2)) every ::0::0 nooutput
set xlabel myX
set ylabel myY
plot FILE u 1:2 w lp pt 7 lc rgb "red"
### end of script
Result:
Upvotes: 1
Reputation: 48390
To elaborate the suggestion of @andyras, here is how you can do it:
datafile = 'filename.txt'
firstrow = system('head -1 '.datafile)
set xlabel word(firstrow, 1)
set ylabel word(firstrow, 2)
plot datafile using 1:2
You must plot with the explicit using
statement, otherwise gnuplot will complain about bad data on line 1
.
Upvotes: 8
Reputation: 1
I think it is supported. You are just supposed to be able to use "":
plot 'file' using "first":"second"
Although, if you want to do math in your using specification, you'll need the column("") function, too
plot 'file' using "first":(column("second")-(column("thrid"))
(Using only quoted header names with the math didn't work for me, anyway.)
Upvotes: -2
Reputation: 15910
I don't think this feature is built in to gnuplot; you would probably have to use an awk-like utility to pull those labels out of a datafile.
You could try submitting a feature request on gnuplot's sourceforge site, and get feedback from the developers there.
Upvotes: 1