question de Nice :)
Vous aurez besoin de quelques étapes pour obtenir un bon résultat:
Afin d'obtenir une carte de répartition, vous devez créer une grille régulière et interpoler votre Les données. Cela peut être fait avec set dgrid3d
. Parce que vous voulez que l'interpolation uniquement pour certaines de vos données, vous devez écrire l'interpolation à un fichier temporaire:
set dgrid3d 200,200,2
set table 'data-heatmap.dat'
splot '< tr "," " " < data.dat' using 1:2:3
unset table
unset dgrid3d
Habituellement, vous pouvez utiliser set datafile separator ','
utiliser des virgules comme délimiteurs, mais le fichier temporaire data-heatmap.dat' contains columns separated by spaces, so you must use
tr` pour remplacer le des virgules avec des espaces blancs.
Ensuite, vous pouvez tracer tous ensemble. Un script complet pourrait se présenter comme suit:
# Diverging color palette from colorbrewer2.org
set palette defined (0 '#006837', 1 '#1a9850', 2 '#66bd63',\
3 '#a6d96a', 4 '#d9ef8b', 5 '#ffffbf',\
6 '#fee08b', 7 '#fdae61', 8 '#f46d43',\
9 '#df3027', 10 '#a50026')
unset key
set dgrid3d 200,200,2
set table 'data-heatmap.dat'
splot '< tr "," " " < data.dat' using 1:2:3
unset table
unset dgrid3d
set autoscale fix
set xtics 0.1
plot 'data-heatmap.dat' u 1:2:3 w image,\
'< tr "," " " < boundary.dat' w l lc rgb 'black' lw 2,\
'< tr "," " " < data.dat' w p pt 7 ps 0.2 lc palette
Pour obtenir une interpolation plus lisse, utilisez set dgrid3d 200,200,1
ou similaire. Peut-être souhaitez-vous également définir une plage de couleurs fixe avec set cbrange
.
Le résultat avec 4.6.5 est:
Les dimensions de la grille générée est dérivée de la zone de délimitation des données éparses. Comme un hack pour étendre la région d'interpolation, vous pouvez ajouter deux points fictifs à la volée lors de la création des données interpolées: un point en haut à droite et un en haut à gauche. Plus tard, vous pouvez corriger un peu pour ces points avec set offsets
:
# Diverging color palette from colorbrewer2.org
set palette defined (0 '#006837', 1 '#1a9850', 2 '#66bd63',\
3 '#a6d96a', 4 '#d9ef8b', 5 '#ffffbf',\
6 '#fee08b', 7 '#fdae61', 8 '#f46d43',\
9 '#df3027', 10 '#a50026')
unset key
set dgrid3d 200,200,2
set table 'data-heatmap.dat'
splot '< echo -e "\n-118.62,34.29,1\n-118.10,34.29,1" | paste -s -d "\n" data.dat - | tr "," " "' using 1:2:3
unset table
unset dgrid3d
set autoscale fix
set offsets -0.02,-0.01,-0.01,0.01
set xtics 0.1
plot 'data-heatmap.dat' u 1:2:3 w image,\
'< tr "," " " < boundary.dat' w l lc rgb 'black' lw 2,\
'< tr "," " " < data.dat' w p pt 7 ps 0.2 lc palette
C'est exactement ce que je cherchais. Est-il possible d'ajouter une petite quantité de rembourrage en haut et en bas pour que l'interpolation continue au nord et au sud de quelques pixels? – user438431
Hmm, "oui", voir mon édition. – Christoph
ok, parfait. Les données sont générées par programme, donc je peux ajouter quelques lignes/colonnes fictives si nécessaire. Je l'ai également modifié pour créer des espaces en utilisant des espaces plutôt que des virgules, donc le tr n'est pas nécessaire. Merci! – user438431