2017-03-11 7 views
1

Ich versuche mit GNUPLOT etwas als Heat Map zu erstellen, aber ich brauche, dass meine Palette diskrete Farben für definierte Werte verwendet.Diskrete Heat Map mit GNUPLOT

ich meine, hat meine Datendatei drei Spalten, zum Beispiel:

xy Wert


0,0 0,0 10
0,0 0,5 2
0,0 1,0 2
0,5 1,0 10
1.0 0.0 -1
1.0 1.0 -1

Ich brauche, dass jeder Punkt eine Farbe hat, abhängig von seinem Wert. Traditionelle Heatmap mischt Punkte, die Bereiche von Continuous-Farben bilden, aber ich brauche sie in einer diskreten Form.

Antwort

0

Wenn Ihre Daten eine „Matrix“ bilden, das heißt, gibt es M x-Proben, N y-Proben, und Sie haben die Daten für alle MxN Punkte, dann wahrscheinlich die einfachste Lösung ist die Verwendung

plot ... w rgbimage u 1:2:(r($3)):(g($3)):(b($3)) 

und geben Sie die r, g, b Werte als drei zusätzliche Spalten wie oben gezeigt an.

Wenn Ihre Daten jedoch "spärlich" sind (nur einige der Beispiele sind wie in Ihrer Frage verfügbar) und es gibt nicht viele Punkte, könnte man versucht sein, die elementaren Quadrate manuell zu erzeugen. Zu diesem Zweck könnte man vorgehen:

set terminal png enhanced 
set output 'plot.png' 

#custom value -> color mapping 
rgb(r, g, b) = 65536 * int(r) + 256 * int(g) + int(b) 
fn(val) = rgb(100 + val*10, 0, 0) 

#square size 
delta = 0.5 
set xr [-delta/2:1+delta/2] 
set yr [-delta/2:1+delta/2] 

set xtics 0,delta/2,1 out nomirror 
set ytics 0,delta/2,1 out nomirror 

set format x "%.2f" 
set format y "%.2f" 

set size ratio 1 

unset key 

fName="test.dat" 

load sprintf("<gawk -v d=%f -f parse.awk %s", delta, fName) 
plot fName u 1:2:3 w labels tc rgb 'white' 

Dieses Skript das Vorhandensein von Hilfs gaffen Skript parse.awk im selben Verzeichnis übernimmt:

{ 
    printf "set object rectangle from %f,%f to %f,%f fc rgb fn(%d) fs solid\n", 
     $1-d/2, $2-d/2, $1+d/2, $2+d/2, $3 
} 

diese Skripte übernimmt die erforderliche Platz Größe (-v d=%f im Aufruf of gawk) und erzeugt für jeden Punkt eine Aussage, die das entsprechende Quadrat erzeugt. Diese Anweisungen werden folglich durch den Befehl load ausgeführt.

Die Zuordnung der Farben erfolgt über die im Haupt-Gnuplot-Skript definierte Funktion fn. Es nimmt den übergebenen Wert und erzeugt einen rgb-Wert, der dann mit fc rgb in der rectangle Spezifikation verwendet wird.

Zusammen ergibt dies dann: enter image description here

+0

Vielen Dank! –

0

Dies könnte das tun, was Sie wollen, nach einiger Fummelei:

set view map set style fill transparent solid noborder splot 'data' u 1:2:3:(100+200*$3) pt 5 lc rgbcolor var ps 14 Die pt 5 wird ein quadratisches Grundstück (zumindest in dem x11 Begriff) an jedem Punkt in der Daten-Datei, farbig nach einer Transformation auf dem letzten Säule.

+0

Sie Lee danken !! –