2016-08-09 5 views
1

In Gnuplot verwende ich ein Histogramm (gruppiert), aber nicht alle Datenpunkte haben gültige Werte. An diesen Stellen möchte ich die Leiste durch einen vertikalen Text mit der Aufschrift "Can not Serve" ersetzen. Wie mache ich es?In einem Histogramm-Diagramm (gruppiert), Wie wird vertikaler Text an Stelle von einigen Balken gesetzt, abhängig von der Bedingung?

Mein aktueller Code:

set style data histogram 
set style histogram cluster gap 2 
set boxwidth 0.9 
set xtic rotate by -45 scale 0 

set output "test.pdf" 
plot 'data.txt' using 2:xtic(1) fs pattern 1 ti col, '' u 3 fs pattern 2 ti col 

Datendatei enthält:

Typen "magnetisch" "electric"
"hohe Belastung" 12000 12721,033920
"med load" 15620,011886 15783,706215
"geringe Last" 15636.000000 16254.000000

+0

Wie aussehen eine Datei ohne gültige Werte? Dieser hat überall gültige Werte, nur musst du yrange [0: *] 'setzen, um den Balken für" high load "zu sehen. Die Antwort hängt davon ab, wie diese ungültigen Werte aussehen. – Miguel

+0

Die "nicht gültigen" Werte werden wie "NaN" oder "Na" anstatt einer Zahl aussehen. – Ron

+0

Entschuldigung, ich kann dieses ohne eine sehr hacky Lösung nicht herausfinden ... – Miguel

Antwort

1

Dies ist ein super hacky Weg, dies zu tun. Ich veränderte Dateien einen „NaN“ hinzuzufügen:

"high load" NaN 12721.033920 
"med load" 15620.011886 NaN 
"low load" 15636.000000 16254.000000 

Jetzt plotten ich alles with boxes wo die Position jedes Feld in Bezug auf die Reihenfolge, in der berechnet wird, die Datensätze in der Datendatei angezeigt (Spalte 0) gewonnen. Es ist hier "manuell" definiert, aber Sie sollten in der Lage sein, eine Funktion zu schreiben, die die xrange und die Boxtrennung basierend auf der Anzahl der Datensätze und der Anzahl der Spalten pro Datensatz erhält, wie zum Beispiel von stats. Auch die boxwidth würde von diesen Werten abhängen.

set xtic rotate by -45 scale 0 
ymax = 20000 
set yrange [0:ymax] 

nrecords = 3 
ncolumns = 2 

set xrange [0:nrecords+1] 

# Calculate boxwidth from available space per column 
gap = 1./ncolumns/5. 
width = 1./ncolumns/2.-gap/2. 
set boxwidth width 

plot "data.txt" u ($0+1.-width/2.-gap/2.):($2) w boxes t "data1", \ 
    "" u ($0+1.+width/2.+gap/2.):($3) w boxes t "data2", \ 
    "" u ($0+1.):(ymax/6.):(stringcolumn(2) eq "NaN" ? \ 
    "Cannot serve" : ""):xtic(1) w labels rotate by 90 offset \ 
    first -width/2.-gap/2.,0 not, \ 
    "" u ($0+1.):(ymax/6.):(stringcolumn(3) eq "NaN" ? "Cannot serve" \ 
    : ""):xtic(1) w labels rotate by 90 offset first width/2.+gap/2.,0 not 

enter image description here

Verwandte Themen