Color matplotlib plot_surface команда с градиентом поверхности

Я хотел бы преобразовать команду серфинга из MATLAB в команду plot_surface в matplotlib .

Перед нами стоит задача использования функции cmap в команде plot_surface для окраски поверхности градиентом.

Вот скрипт matlab

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

Рисунок из такой команды можно найти здесь. (http://www.mathworks.com/help/techdoc/visualize/f0-18164.html#f0-46458)

Вот сценарий python При использовании python и matplotlib для создания подобной функции я не могу покрасить поверхность градиентом.

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

Появляется следующее сообщение об ошибке:

 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' 

Любые входы будут полезны.

Praboo

One Solution collect form web for “Color matplotlib plot_surface команда с градиентом поверхности”

Во-первых, похоже, что вы хотите, чтобы цвета отображались по градиентной величине. Вы пытаетесь использовать векторы градиента, поэтому вы получаете ошибку «list».

Во-вторых, вы можете предоставить cmap, но он определяет только то, как вы хотите, чтобы значения Z отображались на цвет. Если вы хотите новые цвета лица, используйте аргумент facecolors .

В-третьих, вы захотите нормализовать значения до 0..1, а затем сопоставить их с цветовой схемой. (Я думаю, что есть другой способ, но деление величины на max довольно просто)

Вот код:

 # 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, .25) Y = np.arange(-5, 5, .25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) Gx, Gy = np.gradient(Z) # gradients with respect to x and y G = (Gx**2+Gy**2)**.5 # gradient magnitude N = G/G.max() # normalize 0..1 surf = ax.plot_surface( X, Y, Z, rstride=1, cstride=1, facecolors=cm.jet(N), linewidth=0, antialiased=False, shade=False) plt.show() 

И результат:

введите описание изображения здесь

  • Автоматическая настройка размера шрифта в морской карте
  • В чем разница между «pylab» и «matplotlib.pyplot»?
  • Как построить карту тепла из панд DataFrame
  • Matplotlib соединяет точки рассеивания с линией - Python
  • Могу ли я вставлять графики matplotlib в Excel программно?
  • увеличьте ширину линии линий легенды в matplotlib
  • Экспоненциальная ось перемещения в matplotlib
  • Даты в xaxis для графика matplotlib с imshow
  • Python - лучший язык программирования в мире.