2017-05-14 5 views
1

Ich habe Daten (wie Serie von (x, y, z) Punkte) und ich muss 3D-Oberfläche mit echten Spektrum Farben (von (infra) rot bis (ultra) violett einschließlich grün) nach z. Also brauche ich die Heatmap so etwas wie enter image description heregnuplot: Heatmap wie das sichtbare Spektrum für 3D-Oberfläche

Also, wie kann ich das tun?

Alles gut außer Kolorieren.

Wenn es notwendig ist, gibt es mein gnuplot Skript:

set hidden3d 
set dgrid3d 47*4,205*1 gauss 2 
set pm3d 
set cbrange[1.007694:1.210099] 
set xrange [] reverse 
unset ztics 
unset key 
set view 10,70 
set xlabel "x" 
set ylabel "y" 
set ticslevel 0 

set term postscript eps enhanced monochrome 
set output "plot-m.eps" 
splot 'plot.d' with lines 

set term postscript eps enhanced color 
set output "plot-c.eps" 
replot 

set terminal png size 1024,768 enhanced font "DejaVu Serif,20" 
set output "plot-c.png" 
replot 

Und mein Probe Bild ist: enter image description here

Antwort

1

Ich wurde in Ihrer Frage interessiert, so fand ich this und machte eine gnuplot Skript. Hier wird die Palette auf "Funktionen" gesetzt, d. H. R, G und B werden im Bereich [0: 1] berechnet. Sie können Ihren Plotting-Bereich einem Bereich [400: 700] zuordnen, um das volle Spektrum für Ihr Grundstück zu erhalten. Der Bereich liegt zwischen 400 und 700 nm.

reset 
set term pngcairo size 1200,800 
set output 'colormap2.png' 

R(k)=(\ 
l=k*300+400, \ 
(l>=400.0 && l<410.0)? (t=(l-400.0)/(410.0-400.0), (0.33*t)-(0.20*t*t)) : \ 
(l>=410.0 && l<475.0)? (t=(l-410.0)/(475.0-410.0), 0.14-(0.13*t*t)) : \ 
(l>=545.0 && l<595.0)? (t=(l-545.0)/(595.0-545.0), (1.98*t)-(t*t)) : \ 
(l>=595.0 && l<650.0)? (t=(l-595.0)/(650.0-595.0), 0.98+(0.06*t)-(0.40*t*t)) : \ 
(l>=650.0 && l<700.0)? (t=(l-650.0)/(700.0-650.0), 0.65-(0.84*t)+(0.20*t*t)) : \ 
0.0) 


G(k)=(\ 
l=k*300+400, \ 
(l>=415.0 && l<475.0)? (t=(l-415.0)/(475.0-415.0), (0.80*t*t)) : \ 
(l>=475.0 && l<590.0)? (t=(l-475.0)/(590.0-475.0), 0.8+(0.76*t)-(0.80*t*t)) : \ 
(l>=585.0 && l<639.0)? (t=(l-585.0)/(639.0-585.0), 0.84-(0.84*t)) : \ 
0.0) 

B(k)=(\ 
l=k*300+400, \ 
(l>=400.0 && l<475.0)? (t=(l-400.0)/(475.0-400.0), (2.20*t)-(1.50*t*t)) : \ 
(l>=475.0 && l<560.0)? (t=(l-475.0)/(560.0-475.0), 0.7-t+(0.30*t*t)) : \ 
0.0) 

set palette model RGB functions R(gray),G(gray),B(gray) 
set pm3d map 
set samples 2000 
set xrange [400:700] 
set cbrange [400:700] 
splot x 

enter image description here

+0

Vielen Dank für Ihre Antwort, ist das Ergebnis genau das, was ich will. Aber es scheint, dass ich [etwas einfacher] gefunden habe (https://yassernour.wordpress.com/2009/08/08/creating-high-quality-plots-using-gnuplot/): 'set palette rgbformulae 22,13, -31' Aber es ist nicht genau dasselbe. Finden Sie heraus, wie es funktioniert und wie Sie es tun ... – Abelisto

+0

Sie können Ihre Beispiel-Palette Bild auf einige Software für die Bildverarbeitung (Matlab/Octave usw.) und Split-Farben, die Sie zu R, G und B-Komponenten erhalten dann laden Näherungskurven für diese Komponenten, um passende Funktionen zu erhalten, dann können Sie meinen Ansatz anwenden. –