Tengo una tarea simple que debería tener una solución simple, pero he estado intentando desde hace días. Intento ser específico.Mapa de color escalado de facecolors con mplot3d
Intento trazar una superficie usando matplotlib's mplot3d y plot_surface. Cuando trazo la superficie de un conjunto de datos 'z' y trato de escalar el mapa de colores a un determinado valor máximo, cambio la propiedad 'vmax' a este valor. Eso funciona genial
Cuando intento trazar una superficie de un conjunto de datos (z) y uso los colores faciales de un segundo conjunto de datos (fc), esto también funciona bien.
Cuando quiero escalar el mapa de colores de los colores faciales, la propiedad vmax es invalidada por los valores de facecolors. Vmax por lo tanto no tiene ningún efecto (intento1). Las líneas también desaparecieron, pero ese es otro problema.
También intentar cambiar los valores del dataset de facecolor (fc) no tuvo el efecto deseado (intento2).
intento conseguir una figura con un mapa de colores reducido (como en la figura 'escalada' más adelante), pero a escala para los facecolors, y no los valores z.
El código siguiente es lo que tengo ahora, y los resultados de este aspecto:
¿Alguien sabe lo que me falta aquí? ¡Cualquier pensamiento es apreciado!
import pylab as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.ion()
# creating dataset
profile = np.arange(20)**2
z = profile.repeat(20).reshape(20,20)
fc= np.rot90(z.copy())
x = np.arange(z.shape[0])
y = np.arange(z.shape[1])
X, Y = np.meshgrid(x,y)
# plotting
vmax = 100
fig = plt.figure()
ax = fig.add_subplot(1,4,1, projection='3d', azim=210)
ax.plot_surface(X,Y,z, cmap=plt.cm.jet, cstride=1, rstride=1)
ax.set_title('normal')
ax = fig.add_subplot(1,4,2, projection='3d', azim=210)
ax.plot_surface(X,Y,z, cmap=plt.cm.jet, cstride=1, rstride=1, vmax=vmax)
ax.set_title('scaled')
ax = fig.add_subplot(1,4,3, projection='3d', azim=210)
ax.plot_surface(X,Y,z, facecolors=plt.cm.jet(fc), cstride=1, rstride=1, vmax=vmax)
ax.set_title('rotated (attempt1)')
ax = fig.add_subplot(1,4,4, projection='3d', azim=210)
fc[fc> vmax] = vmax
ax.plot_surface(X,Y,z, facecolors=plt.cm.jet(fc), cstride=1, rstride=1)
ax.set_title('rotated (attempt2)')
¿Has descubierto cómo recuperar las líneas negras? Creo que estoy teniendo el mismo problema: http://stackoverflow.com/questions/12355410/fine-tuning-a-surf-plot-using-mplot3d y estoy luchando para que las líneas se muestren. – Dan
Veo que su problema ya está resuelto, genial :-) – Niels