2013-05-21 4 views
1

Je veux dessiner un tracé de contour avec gnuplot, où je veux souligner quelques particularités avec des couleurs spéciales.Axes symétriques dans gnuplot

I définissent le tracé de contour par

set pm3d map 
set palette defined (-1 "red", -0.1 "red", 0 "white", 0.1 "blue", 1 "blue") 

Il en résulte un gradient de couleur qui présente une petite zone avec un gradient allant du rouge au blanc au bleu et la partie restante est rouge pour les nombres négatifs et bleu pour positif Nombres.

Mon problème est maintenant, que je voudrais mettre gnuplot automatiquement à une mise à l'échelle symétrique de l'axe z. Mais en spécifiant splot [][][-200:200] 'data' u 1:2:3 et un jeu de données avec des valeurs de par ex. -300 à 100 gnuplot fait une remise à l'échelle automatique à [-200:100] ce qui entraîne un désalignement de mon échelle de couleurs (la zone blanche est maintenant autour de -50).

Existe-t-il un moyen de forcer un zrange ou d'obtenir un axe mis à l'échelle automatiquement symétrique?

Répondre

3

Je ne suis pas sûr que je comprends le problème, mais avez-vous pensé:

set cbrange [-200:200] 

De la documentation:

Le `set cbrange `command définit la plage de valeurs qui sont colorées en utilisant le` palette` actuel par styles `avec pm3d`,` avec image` et `avec palette`. Les valeurs en dehors de la plage de couleurs utilisent la couleur de l'extrême le plus proche.

+0

C'est exactement ce dont j'avais besoin. Je vous remercie! – Stefan

1

Pour forcer une gamme z, essayez

set zr [-200:200] 

avant votre commande plot. Pour mettre à l'échelle automatiquement l'axe, vous pouvez probablement préparer quelque chose en utilisant stats. L'astuce consiste à garder à l'esprit que la barre de couleur est en unités relatives. Quelque chose comme ça (non testé):

datafile = 'data.dat' 

stats datafile u 3 nooutput 

# assume you want some data positive and some negative 
if (stats_max*stats_min > 0) { 
print 'WARNING: all data has same sign. Color bars may be weird.' 
} 

z0 = -1*min(abs(0.1*stats_min),abs(0.1*stats_max)) 
z1 = 0.0 
z2 = -1*z0 

set palette defined (stats_min "red", z0 "red", z1 "white", 
        z2 "blue", stats_max "blue") 
+0

La commande 'set zr [-200: 200]' ne fonctionne pas. Vous pouvez essayer ceci avec 'set pm3d map' et ensuite' splot [-10: 10] [- 10:10] [] 5 + 10 * sin (x) '. Cela se traduit toujours par un zrange de -6 à 16. L'autre méthode semble très prometteuse. Je vais essayer ça plus tard. – Stefan