2014-04-02 23 views
7

Mi sono chiesto per un po 'di tempo, e potrebbe già essere implementato in gnuplot ma non sono stato in grado di trovare informazioni online.Scambio degli assi in gnuplot

Quando si dispone di un file di dati, è possibile scambiare gli assi e assegnare la "variabile dummy", diciamo x, (in aiuto la terminologia di gnuplot) rispetto all'asse verticale:

plot "data" u 1:2 # x goes to horizontal axis, standard 
plot "data" u 2:1 # x goes to vertical axis, exchanged axes 

Tuttavia, quando hai una funzione, devi fare ricorso a una funzione parametrica per farlo. Immaginate di voler tracciare x = y² (come opposto a y = x²), quindi (per quanto ne so) che devi fare:

set parametric 
plot t**2,t 

enter image description here

che funziona bene in questo caso. Penso, tuttavia, che un approccio più flessibile sarebbe auspicabile, qualcosa come

plot x**2 axes y1x1 # this doesn't work! 

è qualcosa di simile quanto sopra implementato, o c'è un modo semplice per usare y come variabile dicotomica senza la necessità di set parametric?

risposta

3

ecco un'altra brutta, ma gnuplot-unica variante: Utilizzare il nome del file speciale '+' per generare un insieme di dati dinamici set per il tracciato:

plot '+' using ($1**2):1 

La versione di sviluppo contiene una nuova funzionalità, che permette di utilizzare variabili dummy invece dei numeri di colonna per il tracciato con '+':

plot sample [y=-10:10] '+' using (y**2):(y) 

credo che è quello che più si avvicinano alla vostra richiesta.

+1

Questo migliora nella bruttezza ma ancora brutto. Mi piacerebbe ancora vedere implementata l'opzione 'axes y1x1' (o equivalente). – Miguel

0

Per quanto ne so non c'è modo di invertire o scambiare semplicemente gli assi in gnuplot quando si traccia una funzione.

Il motivo deriva dal modo in cui le funzioni vengono tracciate nella normale modalità di stampa. Esiste un insieme di punti a intervalli regolari lungo l'asse x che vengono campionati (frequenza impostata da set samples) e il valore della funzione calcolato. Ciò consente solo funzioni ben educate; un valore y per valore x.

+0

Sì, grazie, l'ho già sottolineato nella prima parte della mia domanda. Questo è il motivo per cui mi sembra strano che l'opzione non sia facilmente disponibile anche per le funzioni. – Miguel

+0

Non sono sicuro di aver perso quella parte della tua domanda! Vedi le mie modifiche alla mia risposta per una spiegazione. – andyras

+1

Il mio punto di vista è, alla fine, non è davvero questione di se la funzione è ben educata o meno, ma semplicemente di essere flessibile con il modo in cui viene eseguita la rappresentazione. y = f (x) = x² è altrettanto ben educato come x = f (y) = y², c'è una rotazione dell'asse semplice coinvolta. Non è un grosso problema, ma mi dà solo fastidio che non sia implementato, probabilmente è comunque colpa mia ... – Miguel

2

Da ciò che ho visto, le trame parametriche sono piuttosto comuni al fine di soddisfare i vostri bisogni. Se davvero odiare trame parametrici e non hai paura per un tempo molto brutto soluzioni, ti posso dare il mio metodo ...

Il mio trucco è quello di utilizzare un file di dati riempito con una sequenza di numeri. Per adattare il vostro esempio, facciamo un file sq con una sequenza di numeri reali -10-10:

seq -10 .5 10 > sq 

E allora si può fare la magia che si desidera usare gnuplot:

plot 'sq' u ($1**2):($1) 

E se si usi Linux si può anche mettere il comando direttamente nella riga di comando:

plot '< seq -10 .5 10' u ($1**2):($1) 

voglio aggiungere che io non sono orgoglioso di questa soluzione e mi lov e anche la funzionalità "axis y1x1".

+0

Sì, ho usato cose brutte come questa in passato per generare contorni per grafici a colori. Per le funzioni, direi che preferisco comunque i grafici parametrici. Non è un grosso problema, mi colpisce solo che qualcosa di semplice come "axes y1x1' e potenzialmente così utile non è implementato. – Miguel

Problemi correlati