2017-11-02 1 views
1

Ich versuche, eine Heat Map von 3D-Ergebnissen, eine f (x, y) -Funktion, auf einem unebenen Gitter erhalten. Die Handlung, die ich erhalte, gibt mir einige hässliche leere Stellen oben in der Grafik. Unten sind minimale Skripte, um das Problem zu reproduzieren, dem ich gegenüberstehe.Gnuplot schlecht macht Heat Map auf ungleichmäßigen Gitter

#Generate some dummy data 
f(x,y) = sqrt(x**2 + y**2) 
set table 
set samples 1000 
set output "table.dat" 
splot [0:10][0:10] f(x,y) 

Das Plotten Skript:

# plot it 
set term x11 
set out 
set pm3d map 
splot [1:5] [0:2] "table.dat" u ($1):($2/$1):($3) 

Da der y-Achse Wert ist abhängig von der x-Achse ist das Gitter jetzt auch. Wie in der folgenden Abbildung zu sehen ist, füllt gnuplot nicht genügend Platz in der Nähe des oberen Randes des Plots. Das Ändern der Achsengrenzen hilft nicht.

sample impage plot

Jede Idee, wie die weißen Dreiecken zu füllen und dieses Grundstück schöner aussehen?

Danke für Ihre Hilfe.

+0

es ist schwer vorstellbar, wie genau es ** schöner aussehen sollte ** – RomanPerekhrest

+0

Hallo, das ist richtig. Ich meinte ohne die weißen Dreiecke an der Spitze. Hier sind einige Daten zu plotten, sie sollten farbig sein. – vjaunet

+0

Wenn Sie die Datenpunkte zwischen Ihren Beispielen ausfüllen möchten, müssen Sie Interpolation verwenden, was Sie mit 'set dgrid3d' tun können. Beachten Sie auch, dass Ihre Tabelle eine sehr gute Auflösung in "x" (1000 Punkte), aber eine sehr schlechte Auflösung in "y" (10 Punkte) hat. Interpolation funktioniert besser mit einem feineren Netz ('set isosamples 1000'). – user8153

Antwort

0

Sie können dgrid3d für 2D-Interpolation verwenden. Mit Ihrer using Spezifikation ($1):($2/$1):($3) ist die Domäne, in der Sie Datenpunkte haben, sehr unregelmäßig. Es hilft Ihnen zu sagen dgrid3d, dass Sie nur in einem kleinen Rechteck interessiert sind, indem Sie alle anderen Werte auf NaN setzen. Zum Beispiel:

set pm3d map 
set dgrid3d 100,100 qnorm 4 
splot [1:5] [0:2] "table.dat" u ($1 >= 1 && $1 <= 5 ? $1 : 1/0):($2/$1 > 0 && $2/$1 < 2 ? $2/$1 : 1/0):3 

enter image description here

Sie werden mit den verschiedenen Möglichkeiten von dgrid3d experimentieren, um eine angemessene Interpolation zu erhalten.

+0

Perfekt! Danke für diesen Trick! Schade nur, dass dgrid3d dies nicht basierend auf den Plot-Bereichen tut. – vjaunet