2016-09-01 3 views
0

3 가지 색으로 컨투어 플롯을 만들고 싶습니다. 지금까지, 내 ​​코드는 다음과 같습니다Matplotlib contourf (3 색)

import numpy as np 
import matplotlib.pyplot as plt 

xMin = 0 
xMax = 3 
xList = np.linspace(xMin, xMax, 10) 
X1, X2 = np.meshgrid(xList, xList) 
Z = [] 
# do some processing with Z 
# Z now contains 0, 0.5 or 1, e.g. Z = [0, 0, 0, 1, 1, 0.5, 1, 0.5...] 
Z = Z.reshape((len(X1), len(X2))) 
plt.contourf(X1, X2, Z,alpha=0.5) 

가 지금은 모든 윤곽을 플롯 할 위치 Z : 빨강 = 0, 파란색 등 녹색 및 Z = 1과 Z = 0.5. 나는 빨강/녹색/파랑 사이의 매끄러운 전환을 원하지 않지만 단지 색상 전환을 원합니다. 색상 및 레벨 옵션을 가지고 놀았지만 예상대로 제대로 작동하지 않았습니다.

등고선이 올바른 방향으로 여기에 있습니까?

답변

1

colors 옵션을 사용하여 등고선 플롯의 색상을 제어 할 수 있지만 imshow를 사용하여 레벨 간의 보간을 피할 수 있습니다. ListedColormap을 사용하여 이산 레벨의 imshow에 대한 색상 맵을 만듭니다.

data = 0*np.ones((20,20)) 
data[5:15,5:15] = 0.5 
data[7:12,8:16] = 1 

# contourf plot 
fig = plt.figure() 
ax1 = fig.add_subplot(2,2,1) 
ax1.contourf(data, [0,0.4,0.9], colors = ['r','g','b']) 
ax1.set_aspect('equal') 
ax1.set_title('contourf') 

# imshow plot 
ax2 = fig.add_subplot(2,2,2) 
# define colr map 
cmap = colors.ListedColormap(['r','g','b']) 
bounds = [0, 0.4,0.6, 1.1] 
norm = colors.BoundaryNorm(bounds, cmap.N) 

ax2.imshow(data, interpolation = 'none', cmap=cmap, norm=norm) 
ax2.set_title('imshow') 

enter image description here

+0

덕분에, 그게 내가 찾던 정확히 – user1228633

관련 문제