2011-07-06 2 views
29

Paul의 도움으로 내 응용 프로그램의 mplot3d example code을 수정했습니다. 코드 읽기 :matplotlib plot_surface 명령의 색상 막대

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

u = np.linspace(0, 2 * np.pi, 100) 
v = np.linspace(0, np.pi, 100) 

x = 10 * np.outer(np.cos(u), np.sin(v)) 
y = 10 * np.outer(np.sin(u), np.sin(v)) 
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) 
z1 = z * np.cos(0.5*x) 

N = z1/z1.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) 

fig.colorbar(surf, shrink=0.5, aspect=5) 
plt.show() 

enter image description here

코드는 표면을 플롯 잘 작동합니다. 다른 사람이 나를 인도 할 수있는 경우

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\test.py", line 22, in <module> 
    fig.colorbar(surf, shrink=0.5, aspect=5) 
    File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 1104, in colorbar 
    cb = cbar.Colorbar(cax, mappable, **kw) 
    File "C:\Python26\lib\site-packages\matplotlib\colorbar.py", line 706, in __init__ 
    mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax 
    File "C:\Python26\lib\site-packages\matplotlib\cm.py", line 261, in autoscale_None 
    raise TypeError('You must first set_array for mappable') 
TypeError: You must first set_array for mappable 

난 너무 감사 할 것 : 나는 위의 음모에 년 Colorbar를 추가하려고 할 때, 나는 다음과 같은 오류가 발생합니다. 당신의 표면에 배열이 매핑되지 않기 때문에

프라 부는

+0

당신은하기 matplotlib 메일 링리스트에 이러한 특정 세부 사항에 대해 아는 사람을 찾을 가능성이 높아집니다. –

답변

42

당신은 프록시 맵핑 가능한 객체를 사용할 수 있습니다. mappable은 모든 배열의 값을 색상 맵에 정의 된 RGB 색상으로 간단하게 변환합니다. 귀하의 경우에는

당신은 Z1 배열이 작업을 수행 할 수 :

import matplotlib.cm as cm 
m = cm.ScalarMappable(cmap=cm.jet) 
m.set_array(z1) 
plt.colorbar(m) 
+15

이 답변은 데이터가 0-1 범위에서 조정된다는 점을 이용합니다. 그렇지 않다면 스칼라 표시는'm = cm.ScalarMappable (cmap = surf.cmap, norm = surf.norm)'으로 정의됩니다. – pelson

관련 문제