2011-04-06 18 views
5

Quiero hacer un gráfico de contorno de algunos datos, pero es posible que todos los valores en el campo tengan el mismo valor. Esto causa un error en matplotlib, que tiene sentido ya que realmente no hay un contorno para crear. Por ejemplo, si ejecuta el código siguiente, obtendrá un error, pero borrará la segunda definición de zi y se ejecutará como se espera.Matplotlib - Gráfico de contorno con valor único

¿Cómo puedo hacer un trazado de "contorno" para algunos datos si se trata de un campo uniforme? Quiero que se vea como la trama de contorno regular (para tener una caja llena de un poco de color y para mostrar una barra de color en el lateral. La barra de color podría ser de un color uniforme, o aún mostrar un rango de 15 colores, no no me importa).

Código:

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() 

Respuesta

10

Bueno, contourf maneja a la perfección, es contour que asfixia.

¿Por qué no hacer esto:

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 esta manera, obtendrá un lleno (verde, por defecto) casilla si hay un campo uniforme, y un gráfico de contorno lleno de líneas de otra manera.

enter image description here

Cuestiones relacionadas