2011-04-06 6 views
5

Je veux faire un tracé de contour de certaines données, mais il est possible que toutes les valeurs dans le domaine à la même valeur. Cela provoque une erreur dans matplotlib, ce qui est logique car il n'y a pas vraiment de contour à créer. Par exemple, si vous exécutez le code ci-dessous, vous obtiendrez une erreur, mais supprimez la deuxième définition de zi et il s'exécute comme prévu.Matplotlib - Contour plot avec une seule valeur

Comment puis-je créer un tracé de "contour" pour certaines données s'il s'agit d'un champ uniforme? Je veux que cela ressemble à l'intrigue contour régulier (pour avoir une boîte remplie de couleur et pour montrer une barre de couleur sur le côté.La barre de couleur pourrait être une couleur uniforme, ou encore montrer une gamme de 15 couleurs, je don Fais attention).

code:

from numpy  import array 
import matplotlib.pyplot as plt 

xi = array([0., 0.5, 1.0]) 
yi = array([0., 0.5, 1.0]) 
zi = array([[0., 1.0, 2.0], 
      [0., 1.0, 2.0], 
      [0., 1.0, 2.0]]) 
zi = array([[1.0, 1.0, 1.0], 
      [1.0, 1.0, 1.0], 
      [1.0, 1.0, 1.0]]) 

CS = plt.contour(xi, yi, zi, 15, linewidths=0.5, colors='k') 
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.jet) 
plt.colorbar() 
plt.show() 

Répondre

10

Eh bien, contourf gère parfaitement, il est contour qui étouffent.

Pourquoi ne pas simplement faire ceci:

import numpy as np 
import matplotlib.pyplot as plt 

xi = np.array([0., 0.5, 1.0]) 
yi = np.array([0., 0.5, 1.0]) 
zi = np.ones((3,3)) 

try: 
    CS = plt.contour(xi, yi, zi, 15, linewidths=0.5, colors='k') 
except ValueError: 
    pass 
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.jet) 

plt.colorbar() 
plt.show() 

De cette façon, vous obtiendrez une boîte remplie (verte, par défaut) s'il y a un champ uniforme, et un tracé de contour rempli de lignes autrement.

enter image description here

Questions connexes