2016-11-30 4 views
2

Ich habe eine Textdatei, die drei Spalten enthält: Breite, Länge und ein Prozentsatz. Die Textdatei sieht wie folgt aus (Link here):Irreguläre Perzentile Tics in der Farbleiste in GNUPlot

25.00 -28.00 0.3 
25.00 -27.00 0.7 
25.00 -26.00 1.6 
25.00 -25.00 4.3 
25.00 -24.00 10.0 
25.00 -23.00 18.2 
25.00 -22.00 33.9 
25.00 -21.00 49.1 
... 

Ich möchte dieses pertentages auf einer Weltkarte als Heatmap zeichnen (die Datei für die Weltkarte für GNUPlot kann here von der Website Autor heruntergeladen werden)

Das Problem ist, mit dem colorbar, die ich die Werte durch unregelmäßige Bereiche (Perzentile) gruppieren möchten. Da es schwierig ist, zu erklären, Ich füge ein Bild wenn das, was ich mit GNUPlot und einem anderen Handlung mit dem gewünschten Ergebnis:

GNUPlot versuchen: enter image description here

Der Code um den Plot zu erzeugen ist:

set palette maxcolors 10 
set palette defined (0 "#000090",1 "#000fff", 2 "#0090ff",3 "#0fffee",4 "#90ff70",5 "#ffee00",6 "#ff7000",7 "#ee0000",8 "#7f0000", 9 "#7f0050") 
set cbtics (99.9 , 99.6, 99.0, 97.5, 95.0, 90.0, 75.0, 50.0, 20.0, 10.0); 
plot [-30:40][25:70] "HeatMap_Test.txt" u 2:1:3 pt 5 ps 2 lc palette notitle, "world_10m.txt" with lines ls 1 notitle 

Gewünschtes Ergebnis: enter image description here

Neben von den Farben in GNUPlot (was sie nicht die letzten diejenigen sind), können Sie sehen, dass die colorbar tic s werden linear verteilt (wobei die Einsen über 99.0 gehalten werden) und nicht nach den durch die Farbbalken definierten Bereichen gruppiert.

Gibt es eine Möglichkeit, dieses Diagramm in GNUPlot zu tun?

Antwort

3

Sie können eine Schrittfunktion definieren, die die z-Spalte nach Bedarf abbildet.

reset 

step(x) = (x < 15.0 ? 0 : \ 
      (x < 35.0 ? 1 : \ 
      (x < 62.5 ? 2 : \ 
      (x < 82.5 ? 3 : \ 
      (x < 92.5 ? 4 : \ 
      (x < 96.25 ? 5 : \ 
      (x < 98.25 ? 6 : \ 
      (x < 99.3 ? 7 : \ 
      (x < 99.75 ? 8 : 9))))))))) 

set palette maxcolors 10 
set palette defined (0 "#333399", 1 "#3333f7", 2 "#3373ff", 3 "#33c6ff", \ 
        4 "#5affd2", 5 "#9cff8f", 6 "#dfff4c", 7 "#ffc733", \ 
        8 "#ff7a33", 9 "#e53333") 

set cbrange [-0.5:9.5] 
set cbtics nomirror 
set cbtics ("99.9" 9, "99.6" 8, "99.0" 7, "97.5" 6, "95.0" 5, \ 
      "90.0" 4, "75.0" 3, "50.0" 2, "20.0" 1, "10.0" 0) 

set terminal pngcairo 
set output "output.png" 
set xrange [-30:40] 
set yrange [ 25:70] 
plot "HeatMap_Test.txt" u 2:1:(step($3)) notitle pt 5 ps 2 lc palette, \ 
    "world_10m.txt" notitle with lines ls 1 lc -1 
set output 

Ich habe den ternären Operator mehrfach verschachtelt die unregelmäßige Prozentsatz zur Karte Bereich 0 ... 100 in eine linearen cbrange -0.5 ... 9.5. Diese

ist das Ergebnis mit Gnuplot 4.6:

irregular percentile tics

+0

Wow! Vielen Dank! Es funktioniert perfekt! Du hast sogar die richtigen Farben! Ein letzter Kommentar: Gibt es eine Möglichkeit, die Grenzen an die Größe des Bildes anzupassen? – AwkMan