2017-04-21 6 views
0

Ich versuche, einige Daten aus einer Datei, die einen Zeitstempel und Kommentare als Zeichenfolge und verschiedene andere Daten enthält.Gnuplot Plotten beschriftet Punkte mit wechselnden Abstand

Was ist bisher Woking ist, alle Kommentare als Etikett mit der Zeit zu plotten, aber ich bin auf der Suche nach einer Art von intelligenten Abstand, so dass die Kommentare nicht überlappen.

Ich bin auch auf der Suche nach einer Möglichkeit, die Kommentare zu filtern. Ich habe eine andere Spalte, die angibt, ob der Kommentar versteckt sein soll oder nicht. Ich verwende dieses Statment für conditional plotting:

plot 'data' using $1:0:($7==0?$6:" ") 

Es ist die Datenpunkte Filterung aber statt die Zeichenfolge in ($ 6) zeigt es zeigt 0, wenn das Statment wahr ist.

Ich denke, ich kann den Abstand umgehen, indem ich die Zeit von Hand manipuliere, wenn der Abstand zu klein ist, aber ein funktionierender Filter wäre eine große Hilfe.

Hat jemand schon einmal mit dieser Art von Problem zu tun gehabt? Ich habe ein Bild meiner bisherigen Fortschritte hinzugefügt.

Ich freue mich über Vorschläge. Vielen Dank.

Plot

Antwort

0

Um Textfelder innerhalb eines using Ausdrucks zu verwenden, muss die stringcolumn Funktion verwendet werden. Für Ihr Beispiel, etwas wie

plot 'data' using $1:(0):($7==0 ? stringcolumn(6) : " ") with labels 

sollte für den Filter Aspekt Ihrer Frage arbeiten.

+0

Funktioniert perfekt! Bei der bedingten Beschriftung ist der Abstand nicht mehr so ​​wichtig, da die Anzahl der Kommentare drastisch reduziert wird. Vielen dank für Deine Hilfe! –

0

Um Ihre Etiketten nicht zu machen überlappen, was Drehen sie nach unten und aus dem Weg mit rotate by -60?

Der Standard-untere Rand würde sie ausschneiden, in diesem Fall müssten Sie es mit etwas wie set bmargin 10 erweitern.

Um bedingt zu plotten, müssen Sie einen numerischen Fehler generieren, nicht nur einen Nullwert, wenn die Bedingung falsch ist. Der einfachste Weg wäre:

plot 'data' using $1:0:($7==0?$6:NaN) 

obwohl in älteren Skripte oft ein 1/0 sieht verwendet, um die NaN zu erzeugen, wie in:

plot 'data' using $1:0:($7==0?$6:1/0) 

Statt bedingten Plotten Sie explizite Etiketten könnten, wie in :

set xdata time 
set timefmt "%d/%m/%y\t%H%M" 
set format x "%d/%m\n%H:%M" 
set xrange [ "1/6/93":"1/11/93" ] 
set grid 
set style data fsteps 
set bmargin 10 
set label 1 'Look at the spike here' at '01/10/93',0.05 rotate by -45 point 
# https://github.com/gnuplot/gnuplot/blob/master/demo/timedat.dat 
plot 'timedat.dat' using 1:4 notitle 

Das erzeugt resulting plot

+0

Irgendwie mag Gnuplot nicht die String-Ausgabe in Kombination mit dem bedingten Plotten. Die Verwendung von expliziten Labels ist eine gute Alternative, aber die Anzahl der Kommentare wird wahrscheinlich noch steigen. Vielen Dank für Ihre Antwort. –

Verwandte Themen