Ich verwende die folgenden gnuplot
Befehle ein Diagramm zu erstellen:gnuplot, wie man nur bestimmte Punkte beschriftet?
#!/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
wo data_file
wie folgt aussieht:
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
ich gnuplot wollen beschriften alle Punkte mit den gefundenen Strings in Spalte 1
, außer der eine, wo Spalte 4
ist gleich -3.60
In diesem Fall möchte ich die aaa
stri ng. Was ich bekomme ist, dass der $4=-3.60
Datenpunkt richtig als aaa
bezeichnet wird, aber der Rest wird nicht an allen beschriftet.
aktualisieren: gnuplot hat kein Problem zeigt Zahlen als Markierungen die bedingte Anweisung, das heißt: jede Spalte aber 1
korrekt als Etikett für jeden Punkt angezeigt Einhaltung der Bedingungen auferlegt. Das heißt, zeigt diese Zeile Spalte 2
(numbres) als Punktbezeichnungen die bedingte Anweisung zu respektieren:
plot 'data_file' u 3:2 w points , '' u 3:2:($4!=-3.60 ? $2:'aaa') w labels
Update 2: Es hat auch kein Problem in der Spalte 1
als Punktbezeichnungen Plotten, wenn ich es als ein plotten Ganze, dh nicht eine bedingte Anweisung verwenden. Das heißt, stellt diese Linie richtig alle die Punktbezeichnungen in Spalte 1
(Strings):
plot 'data_file' u 3:2 w points , '' u 3:2:1 w labels
So klar ist das Problem zusammen mit den Saiten Spalte der bedingte Anweisung in Verwendung. Irgendwelche von diesen verwendeten getrennt funktioniert gut.
Diese Lösung funktioniert nicht für mich. Alles, was ich bekomme, ist ein einzelnes Label ('aaa'), das die eine Bezeichnung darstellt, die das OP entfernen möchte ... 'sprintf ("% d ", $ 1)' funktioniert nur, wenn die Daten in Spalte 1 ganze Zahlen sind. doing 'sprintf ("% s ", $ 1)' funktioniert auch nicht. Fehle ich hier etwas? – mgilson
Ich habe kein gnuplot um zu überprüfen, aber vielleicht ist es anders, wenn die erste Zeile der Spalte 1 keine Zahl enthält (in diesem Fall sollte das ganze Sprintf-Ding nicht benötigt werden). Ich gestehe, ich habe es auf einer Datendatei von mir versucht, und nicht genau auf der OP's ... Ich würde auch versuchen '(($ 4! = - 3.60)? ''. $ 1: 'aaa'' um String-Konvertierung nur zu erzwingen –
Die folgenden Funktionen '($ 4 ne '-3.60'? stringcolumn (1): '')' (stringcolumn ist ein besserer Weg als die String-Verkettung), aber dieser Test ist sehr fragil, da er eine Zeichenkette ausführt Vergleich auf '-3.60' anstelle eines Gleitkommavergleichs (zB -3.6 wird immer noch eine Beschriftung darauf setzen. Das Problem hier ist, dass Gnuplot Zeichenketten in diesem Feld erwartet, da gnuplot Zeichenketten darstellt Die beste Lösung ist die, die ich unten vorstelle (IMHO) - verschiebe einfach den Filter und es funktioniert gut – mgilson