2016-04-30 22 views
1

Ich programmiere ein Diagramm mit Achsen (y „%“ und x „date“), und wenn weniger als 7 Datensätze nicht gutFehler mit Grafiken gnuplot

gezeigt haben

Dies sind die Dateien

Daten. csv:

20-04-2016 96.8 95.8 100 
21-04-2016 97.07 97.99 100 
22-04-2016 98.05 99.5 100 
23-04-2016 98.64 97.88 100 
24-04-2016 98.96 98.99 100 
25-04-2016 98.68 98.11 100 

graph

reset 

set terminal png size 1200,500 

#set xlabel "Time (days)" 
set xdata time 
set timefmt "%d-%m-%Y" 


set ylabel "Total Petitions (%)" 
set yrange [95:100] 

set title "Akamai" 
set key reverse Left outside 
set grid 

set style data linespoints 

plot "datos.csv" using 1:2 title "One (%)", \ 
"" using 1:3 title "Two (%)", \ 
"" using 1:4 title "Ideal (%)" 

Er zeigt mir dieses

Wie gezeigt, werden die Daten wiederholt, und ich möchte ein Datum pro Datensatz angezeigt.

Ich mag auch das Datum setzen

%d-%m\n%Y 

Dies ist gelöst, wenn ich 7 gesetzt oder mehr Datensätze

Und das passiert, wenn ich das volle Datum setzen, aber die Beschreibung der Achse x

enter image description here

Es könnte das Datum vertikal setzen?

Vielen Dank für Ihre Hilfe

Antwort

1

Verwendung set format x;

set terminal pngcairo enhanced color dashed \ 
rounded size 1200,500 

set title "Akamai" 
set xlabel "date" 
set xdata time 
set timefmt "%d-%m-%Y" 
set format x "%d/%m\n%Y" 
set xtics 86400 
set nomxtics 
set ylabel "Total Petitions (%)" 
set yrange [95:100] 
set style data linespoints 
set grid 
set key right bottom 
set output 'user1847844.png' 

plot "datos.csv" using 1:2 title "One (%)", \ 
"" using 1:3 title "Two (%)", \ 
"" using 1:4 title "Ideal (%)" 

Intern gnuplot wandelt Datetimes auf Sekunden. Die Zeile set xtics 86400 sagt also grundsätzlich, dass man einen Tick pro Tag macht, da ein Tag 24 * 60 * 60 = 86400 Sekunden hat. Die set nomxtics weist gnuplot an, kleinere Teilstriche auf der x-Achse nicht anzuzeigen.

Dies gibt: corrected PNG image

Wenn Sie das Etikett, Gebrauch zu drehen:

set format x "%d/%m/%Y" 
set xtics rotate 86400 

, dass die Daten in einer einzigen Zeile formatieren soll und die Etiketten um 90 Grad drehen.

Update:

Bitte beachte, dass ich die pngcairo Terminal bin mit. Dies basiert auf der cairo graphics library. Dies ermöglicht eine konsistente Ausgabe auf allen Ausgabemedien. Aber gnuplot muss mit cairo-Unterstützung kompiliert werden, damit dies funktioniert.

Im Allgemeinen bevorzuge ich die pdfcairo Klemme. Dies erzeugt eine PDF-Ausgabe, die ohne Pixelierungseffekte skaliert werden kann.

Update 2:

Um die Konsistenz in meinem Graphen zu erhalten, habe ich bestimmte Arten in meinem gnuplotrc definiert, die ich in meinem Graphen verwenden. Der Inhalt meines gnuplotrc ist unten gezeigt.

set encoding utf8 

# See https://github.com/Gnuplotting/gnuplot-palettes 
# Line styles (colorbrewer Set1) 
set style line 1 lc rgb '#E41A1C' pt 1 ps 1 lt 1 lw 2 # red 
set style line 2 lc rgb '#377EB8' pt 6 ps 1 lt 1 lw 2 # blue 
set style line 3 lc rgb '#4DAF4A' pt 2 ps 1 lt 1 lw 2 # green 
set style line 4 lc rgb '#984EA3' pt 3 ps 1 lt 1 lw 2 # purple 
set style line 5 lc rgb '#FF7F00' pt 4 ps 1 lt 1 lw 2 # orange 
set style line 6 lc rgb '#FFFF33' pt 5 ps 1 lt 1 lw 2 # yellow 
set style line 7 lc rgb '#A65628' pt 7 ps 1 lt 1 lw 2 # brown 
set style line 8 lc rgb '#F781BF' pt 8 ps 1 lt 1 lw 2 # pink 
# Palette 
set palette maxcolors 8 
set palette defined (0 '#E41A1C', 1 '#377EB8', 2 '#4DAF4A', 3 '#984EA3',\ 
4 '#FF7F00', 5 '#FFFF33', 6 '#A65628', 7 '#F781BF') 

# Standard border 
set style line 11 lc rgb '#808080' lt 1 lw 3 
set border 0 back ls 11 
set tics out nomirror 

# Standard grid 
set style line 12 lc rgb '#808080' lt 0 lw 1 
set grid back ls 12 
unset grid 

Und ich verwende ein pdfcairo Terminal als Standard, so.

set terminal pdfcairo enhanced color dashed font "Alegreya, 14" \ 
rounded size 16 cm, 9.6 cm 

Die verwendete Schriftart ist ein Beispiel. Für Grafiken in Berichten verwende ich die gleiche Schriftart wie der Fließtext.

Der Befehl plot verwendet die definierten Stile.

plot "user1847844.d" using 1:2 ls 1 title "One (%)", \ 
"" using 1:3 ls 2 title "Two (%)", \ 
"" using 1:4 ls 3 title "Ideal (%)" 

Dies ergibt eine Figur, die so aussieht. graph with my settings


Hinweis: Da Stackoverflow akzeptiert keine PDF-Bilder, ich konvertiert es in eine PNG ImageMagick.

convert -density 300 <input.pdf> -quality 100 -sharpen 0x1.0 <output.png>