2017-05-01 2 views
1

ich die Y-Werte über die Oberseite der Balken des Histogramms für das Diagramm unten setzen wollen: `gnuplot Histogramm Labelwerte

set style data histogram 
#clustered 
#set terminal wxt enhanced persist 
set term post eps enhanced "Times-Roman, 14" 
set output 'avg_waste.bmp' 
set boxwidth 1.3 
set grid 
set auto y 
set auto x 

set style histogram clustered gap 1 title offset 1,0.25 
set ylabel "\nAverage Resource Wastage\n\n\n" font "Times-Roman,25" 
set xlabel "\nWorkflows\n" font "Times-Roman,25" 
#set style fill solid noborder 
set style fill pattern border -1 

set key at graph 0.2, 0.9 
set key spacing 2 font "Times-Roman,18" 
set xtics font ", 25" 
set ytics font ", 25" 


plot for [COL=2:3] 'avg_waste' using COL:xticlabels(1) title columnheader fs pattern 2 ` 

wenn ich versuche, Etiketten zu verwenden, gibt gnuplot den Fehler Not enough columns for this style My Datendatei ist

#WASTAGE 
     CRCH  HEFT 
Cybershake 20.89  22.5785714286 
LIGO  187.3228571429 199.5134285714 
SIPHT  205.7514285714 210.3685714286 
Montage  12.1485714286 12.7942857143 
+1

Siehe http://stackoverflow.com/a/40492423/2604213 – Christoph

Antwort

2

Eine Möglichkeit, diese Etiketten manuell wie zum Beispiel zu platzieren wäre:

reset 
fontSpec(s) = sprintf("Times-Roman, %d", s) 

set term post eps enhanced fontSpec(16) 
set output 'avg_waste.eps' 

set grid 
set auto y 
set auto x 

ticsFont=fontSpec(16) 
set xtics font ticsFont 
set ytics font ticsFont 

set ylabel "Average Resource Wastage" font fontSpec(25) offset char -1,0 
set xlabel "Workflows" font fontSpec(25) offset 0,char -1 

set style fill pattern border -1 
set style data histograms 
set boxwidth 1.0 
set style histogram clustered gap 1 

keyFont=fontSpec(18) 
set key spacing 2 font keyFont 
#using directly 'set key spacing 2 font fontSpec(18)' doesn't seem to work... 

set key at graph 0.25, 0.9 

fn(v) = sprintf("%.1f", v) 

plot \ 
    for [COL=2:3] 'avg_waste' using COL:xticlabels(1) title columnheader fs pattern 2, \ 
    'avg_waste' u ($0-1-1./6):2:(fn($2)) w labels font fontSpec(14) offset char 0,0.5 t '' , \ 
    'avg_waste' u ($0-1+1./6):3:(fn($3)) w labels font fontSpec(14) offset char 0,0.5 t '' 
da Sie auch

, zu wollen, scheinen die Titel von Column genommen verwenden, nimmt das Skript oben, dass die Eingangsdaten von der Form:

WASTAGE CRCH  HEFT 
Cybershake 20.89  22.5785714286 
LIGO  187.3228571429 199.5134285714 
SIPHT  205.7514285714 210.3685714286 
Montage  12.1485714286 12.7942857143 

das heißt, wird die erste Zeile aus nicht kommentiert.

Dies erzeugt dann: enter image description here

EDIT: Was die Spezifikation using($0-1-1./6):2:(fn($2)), ist es basierend auf der Tatsache, dass der einzelne „Block“ der Stäbe bei ganzzahligen Koordinaten zentriert ist 0,1,2, und 3 Jetzt, mit zwei Blöcken pro Gruppe, ist die Breite jedes Blocks 0,3 (2 Blöcke zwischen den Zentren jeder Gruppe + eine leere für den Raum). Die Spalte 0, $0, enthält den 0-basierten Index einer bestimmten Zeile in der Datendatei, also zum Beispiel für die Zeile "Cybershake" gleich 1, also weist die Syntax ($0-1-1./6):2:(fn($2)) dann Gnuplot an, eine von der Funktion fn bei Koordinaten -1./6,$2, dh oben auf der linken Leiste in der "Cybershake" Gruppe. Hier wird fn nur als "Makro" verwendet, um eine Eingabe-Fließkommazahl über die sprintf-Funktion zu formatieren.

+0

Vielen Dank! Diese Antwort hat viel Zeit für mich gespeichert – user3319015

+0

@ user3319015 mein Vergnügen :) Es gab ein kleines Problem mit der 'fontSpec' Funktion, ich habe die Antwort aktualisiert, um dies zu adressieren ... – ewcz

+0

Eine kurze Beschreibung der Zeile' fn (v) = sprintf ("%. 1f", v) 'und die letzten beiden Zeilen wären eine große Hilfe. Danke – user3319015