Sto utilizzando i seguenti gnuplot
comandi per creare una trama:gnuplot, come etichettare solo determinati punti?
#!/bin/bash
gnuplot << 'EOF'
set term postscript portrait color enhanced
set output 'out.ps'
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $1:'aaa') w labels
EOF
dove data_file
assomiglia a questo:
O4 -1.20 -0.33 -5.20
O9.5 -1.10 -0.30 -3.60
B0 -1.08 -0.30 -3.25
B0.5 -1.00 -0.28 -2.60
B1.5 -0.90 -0.25 -2.10
B2.5 -0.80 -0.22 -1.50
B3 -0.69 -0.20 -1.10
voglio gnuplot per etichettare tutti punti con le stringhe trovate nella colonna 1
, eccetto quello in cui la colonna 4
è uguale a -3.60
nel qual caso voglio lo spacco aaa
ng. Quello che sto ottenendo è che il punto di dati $4=-3.60
viene etichettato correttamente come aaa
, ma il resto non sono stati etichettati per tutto.
Aggiornamento: gnuplot non ha alcun problema mostrando numeri come etichette utilizzando il condizionale, vale a dire: una colonna ma 1
viene visualizzato correttamente come etichetta per ogni punto nel rispetto delle condizioni imposte. Cioè, questa linea mostra delle colonne 2
(numbres) come etichette punti rispetto l'istruzione condizionale:
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $2:'aaa') w labels
Update 2: Essa ha anche un problema nel tracciare colonna 1
come etichette dei punti se io tracciare come un intero, ovvero non utilizzando un'istruzione condizionale. Cioè, questa linea traccia correttamente tutti le etichette dei punti nella colonna 1
(stringhe):
plot 'data_file' u 3:2 w points , '' u 3:2:1 w labels
Quindi chiaramente il problema è nella utilizzando l'istruzione condizionale insieme con la colonna corde. Ognuno di questi usato separatamente funziona bene.
Questa soluzione non funziona per me. Tutto quello che ottengo è una singola etichetta ('aaa') che rappresenta l'etichetta che l'OP vuole essere rimossa ... facendo 'sprintf ("% d ", $ 1)' funziona solo se i dati nella colonna 1 sono interi. anche fare 'sprintf ("% s ", $ 1)' non funziona. Mi sto perdendo qualcosa qui? – mgilson
Non ho gnuplot in giro da controllare, ma forse è diverso se la prima riga della colonna 1 non contiene un numero (in tal caso l'intera cosa sprintf non dovrebbe essere necessaria). Confesso di averlo provato su un mio file di dati, e non esattamente su quello dell'OP ... Vorrei anche provare '(($ 4! = - 3.60)? '. $ 1:' aaa'' per forzare solo la conversione di stringhe –
Il seguente funziona '($ 4 ne '-3.60'? stringcolumn (1): '')' (stringcolumn è un modo migliore di usare la concatenazione di stringhe), ma questo test è davvero piuttosto fragile dato che sta facendo una stringa confronto su '-3.60' invece di un confronto float. (ad esempio -3,6 inserirà comunque un'etichetta). Il problema qui è che poiché gnuplot sta plottando le etichette, è in attesa di stringhe in quel campo (convertendo la colonna 4 in stringhe su input sembra). Questo lascia anche quella stringa (vuota) nell'output che la gonfia.La soluzione migliore è quella che propongo di seguito (IMHO) - basta spostare il filtro e funziona bene – mgilson