Couleur matplotlib plot_surface de commande avec la surface de gradient
Je voudrais convertir des vagues de commande de MATLAB à plot_surface commande en matplotlib.
Le défi que je suis confronté est lors de l'utilisation de cmap fonction dans plot_surface de commande pour la couleur de la surface avec un dégradé.
Ici est la matlab script
% Matlab Commands
x = -5:.25:5; y = x
[x,y] = meshgrid(x);
R = sqrt(x.^2 + y.^2);
Z = sin(R)
surf(x,y,Z,gradient(Z))
La figure d'une telle commande peut être trouvé ici. (http://www.mathworks.com/help/techdoc/visualize/f0-18164.html#f0-46458)
Ici est la python scipt
Lors de l'utilisation de python et matplotlib pour créer une fonction similaire, je suis incapable de couleur de la surface avec un dégradé.
# Python-matplotlib Commands
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=gradient(Z), linewidth=0, antialiased=False)
plt.show()
Je reçois le message d'erreur suivant:
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
File "C:\Python26\lib\site-packages\spyderlib\widgets\externalshell\startup.py", line 122, in runfile
execfile(filename, glbs)
File "C:\Documents and Settings\mramacha\My Documents\Python\Candela\tmp.py", line 13, in <module>
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=gradient(Z), linewidth=0, antialiased=False)
File "C:\Python26\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 729, in plot_surface
polyc = art3d.Poly3DCollection(polys, *args, **kwargs)
File "C:\Python26\lib\site-packages\mpl_toolkits\mplot3d\art3d.py", line 344, in __init__
PolyCollection.__init__(self, verts, *args, **kwargs)
File "C:\Python26\lib\site-packages\matplotlib\collections.py", line 570, in __init__
Collection.__init__(self,**kwargs)
File "C:\Python26\lib\site-packages\matplotlib\collections.py", line 86, in __init__
cm.ScalarMappable.__init__(self, norm, cmap)
File "C:\Python26\lib\site-packages\matplotlib\cm.py", line 155, in __init__
self.cmap = get_cmap(cmap)
File "C:\Python26\lib\site-packages\matplotlib\cm.py", line 126, in get_cmap
if name in cmap_d:
TypeError: unhashable type: 'list'
Toute entrée serait utile.
Praboo
OriginalL'auteur praboo | 2011-06-30
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, il semble que vous souhaitez les couleurs mappé à partir ampleur du gradient. Vous essayez d'utiliser le gradient de vecteurs qui est pourquoi vous obtenez la liste des' erreur.
Seconde, vous pouvez fournir une cmap, mais il ne définit la façon dont vous voulez que les valeurs Z mappé à une couleur. Si vous voulez de nouvelles couleurs des faces puis utilisez le
facecolors
argument.Troisième, vous aurez envie de normaliser les valeurs à 0..1 carte par une palette de couleurs. (Je pense qu'il y a une autre façon, mais en divisant l'ampleur par le max est assez simple)
Voici le code:
Et le résultat:
Comment voulez-vous ajouter de la barre de couleur à cette parcelle afin de refléter le changement de la palette de couleurs.
Vous avez besoin d'instancier un ScalarMappable. C'est intéressant et non négligeable sujet et de la communauté serait bien servi si c'était présenté comme une question distincte.
OriginalL'auteur Paul