No, non esiste alcuna opzione per l'autoscalaggio per gli intervalli X e Y sugli stessi valori. Ecco una soluzione, come puoi farlo con alcuni trucchi.
Se si desidera mantenere gnuplot di estensione degli intervalli per i prossimi tic, si può fare come segue:
È innanzitutto necessario tracciare una volta usando il terminale unknown
. Ciò consente di risparmiare i valori x e y nelle variabili gnuplot GPVAL_X_MIN
, GPVAL_X_MAX
, GPVAL_Y_MIN
e GPVAL_Y_MAX
. Poi si impostano gli intervalli e replot:
set terminal push # save current terminal
set terminal unknown
plot 'datafile'
set terminal pop # restore previous terminal
min = (GPVAL_Y_MIN < GPVAL_X_MIN ? GPVAL_Y_MIN : GPVAL_X_MIN)
max = (GPVAL_Y_MAX > GPVAL_X_MAX ? GPVAL_Y_MAX : GPVAL_X_MAX)
set xrange[min:max]
set yrange[min:max]
set size ratio -1
replot
La roba push/pop è necessario solo se si desidera mantenere le impostazioni del terminale iniziali.
Per rendere questo riutilizzabile, ad es. per l'utilizzo con multiplot
, è possibile avvolgere tutti quei comandi all'interno di una stringa e chiamare eval
su di esso:
autoscale_xy(datafile) = \
"set terminal push; set terminal unknown; set autoscale;".\
"plot '".datafile."'; set terminal pop;".\
"min = (GPVAL_Y_MIN < GPVAL_X_MIN ? GPVAL_Y_MIN : GPVAL_X_MIN);".\
"max = (GPVAL_Y_MAX > GPVAL_X_MAX ? GPVAL_Y_MAX : GPVAL_X_MAX);".\
"set xrange[min:max]; set yrange[min:max];"
...
files = "first second third fourth"
do for [f in files] {
eval(autoscale_xy(f))
plot f
}
Un'altra possibilità sarebbe quella di utilizzare stats
per calcolare il valori y massimo e minimo e x- e impostare gli intervalli di conseguenza:
stats 'datafile' using 1:2 nooutput
min = (STATS_min_y < STATS_min_x ? STATS_min_y : STATS_min_x)
min = (STATS_max_y > STATS_max_x ? STATS_max_y : STATS_max_x)
sc = 1.05
set xrange[sc*min:sc*max]
set yrange[sc*min:sc*max]
set size ratio -1
plot 'datafile'
Grazie per la soluzione. Questo metodo è piuttosto frustrante, tuttavia, poiché sto usando 'multiplot' per tracciare 4 grafici da diverse colonne nel file di dati. dovendo fare questo per ogni set di dati non è l'ideale, ma praticabile. – Rohan
Sì, davvero. Ho aggiornato la mia risposta per mostrarvi come è possibile inserire tutto questo in una stringa e usare 'eval' per renderlo riutilizzabile. – Christoph