Pregunta

Estoy tratando de crear una trama de contorno llena en matplotlib (Win7, 1.1.0). Quiero resaltar ciertos valores, y los niveles están más cerca de log que Lineal.

Hay numerosos colormaps que me adaptarán, pero mi elección de CMAP se ignora.

¿Necesito crear una "normalización" personalizada? Si es así, cada contorno se colorea de acuerdo con su valor de borde y luego se llena con el mismo color al siguiente valor más bajo? ¿Por qué el síntoma de esto es ignorar mi mapa de color ... es esta excepción durante la construcción que se está atrapando y mi solicitud se ignora en silencio?

Mis datos originales tenían valores faltantes. He jugado con esto, esto, grande y pequeño ... en cada caso he intentado enmascararlos y no enmascarar los valores "externos". También he probado todas las permutaciones utilizando los niveles predeterminados y la norma.

lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.normalize(0,32)
cs = plt.contourf(x,z,data,cmap=cm.gray, levels=lev, norm = norml)

Espero que este fragmento sea suficiente para al menos comenzar la conversación.

Gracias Eli

¿Fue útil?

Solución

Si lo entendí correctamente, debe rescalar sus datos a los colores utilizando sus niveles como base en lugar de escala lineal predeterminada. Si eso es correcto, entonces necesitas usar colors.BoundaryNorm como el factor norma. Considere el siguiente ejemplo:

x = np.arange(0,8,0.1)
y = np.arange(0,8,0.1)
z = (x[:,None]-4) ** 2 + (y[None,:]-4) ** 2

lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.BoundaryNorm(lev, 256)
cs = plt.contourf(x, y, z, cmap = cm.jet, levels = lev, norm = norml)
plt.show()

Esto rendimiento

enter image description here

Compare con predeterminado Normalize comportamiento:

enter image description here

Espero que ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top