I’m plotting some data with a different X range and I would like to change yrange according to the maximum and minimum value of the data in the current X range. When I use GPVAL_Y_MAX and GPVAL_Y_MIN, these values correspond to the maximum and minimum of the whole data, not just the data in the range.
For example, I have the following data:
1 3
2 5
3 8
4 20
5 30
I use the following script:
plot 'data.txt' u 1:2;
set xrange [1:3];
replot
set xrange [1:5];
replot
In the first plot I would like to set yrange in [3:8], but in the second plot the yrange sholud be [3:30]. If I use something like
set yrange [GPVAL_Y_MIN:GPVAL_Y_MAX]
GPVAL_Y_MIN and GPVAL_Y_MAX have the same value independently of the xrange.
Any solution?
The variables you want are
GPVAL_DATA_Y_MINandGPVAL_DATA_Y_MAX, which are the y-min/max of the data plotted in a certain range.GPVAL_Y_MINandGPVAL_Y_MAXare a little less useful generally because they tell you where the edges of the plot border are (in general these values extend a little beyond theGPVAL_DATA...variables because gnuplot leaves a little space between the data and the edge of the plot).To take advantage of these variables you have to use the range specifiers to the plot command:
By the way, the
u 1:2specification is redundant unless you want to remind yourself of which columns you are plotting, since plotting the first two columns as x and y is the gnuplot default. If you don’t want to replot to the same output terminal (which is not helpful in some terminals like eps where replotting makes a second page with the same plot), use this command sequence:Note the use of the range specifier again, this time with a y range specified. This is a little more compact than specifying with
set yrange, but makes for a longer line of code.If you have gnuplot 4.6.0 or higher, you can take advantage of the
statscommand to avoid replotting. Thestatscommand creates a bunch of handy variablesA slightly different command,
Would fill the plot in the x direction based on where the actual data lie. For instance if you had data points at {(1.1, 3), (2, 4), (2.9,5)}, the x range would be set to [1.1:2.9].