2014-02-22 5 views
9

필자의 경우에 적용되지 않는 많은 예제를 보았습니다. 내가하고 싶은 것은 colorbar에 대한 간단한 최소값과 최대 값을 설정하는 것입니다. 이미지 cmap의 범위를 설정하는 것은 쉽지만이 작업은 색상 막대의 최소값과 최대 값에 동일한 범위를 적용하지 않습니다. cmap를 범위는 이제 0matplotlib의 색상 막대에 대한 제한 설정

답변

11

I propose you incorporate you plot in a fig (1) 사이에 고정되어 있지만,

triang = Triangulation(x,y) 
plt.tricontourf(triang, z, vmax=1., vmin=0.) 
plt.colorbar() 

년 Colorbar 여전히 데이터 Z의 범위에 고정하고이 샘플에서 영감을 얻을 : 아래 코드 설명 할 당신은 당신이 년 Colorbar의 색상에 대한 bounds을 설정하고 진드기 할 수있는 참조 년 Colorbar

data = np.tile(np.arange(4), 2) 
fig = plt.figure() 
ax = fig.add_subplot(121) 
cax = fig.add_subplot(122) 
cmap = colors.ListedColormap(['b','g','y','r']) 
bounds=[0,1,2,3,4] 
norm = colors.BoundaryNorm(bounds, cmap.N) 
im=ax.imshow(data[None], aspect='auto',cmap=cmap, norm=norm) 
cbar = fig.colorbar(im, cax=cax, cmap=cmap, norm=norm, boundaries=bounds, 
    ticks=[0.5,1.5,2.5,3.5],) 
plt.show() 

를 사용하여.

당신이 달성하기를 원하는 것은 엄밀히는 없지만, 무화과에 대한 힌트가 도움이 될 수 있습니다.

This other one uses ticks 또한 컬러 바의 스케일을 정의합니다.

import numpy as np 
import matplotlib.pyplot as plt 

xi = np.array([0., 0.5, 1.0]) 
yi = np.array([0., 0.5, 1.0]) 
zi = np.array([[0., 1.0, 2.0], 
       [0., 1.0, 2.0], 
       [-0.1, 1.0, 2.0]]) 

v = np.linspace(-.1, 2.0, 15, endpoint=True) 
plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k') 
plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet) 
x = plt.colorbar(ticks=v) 
print x 
plt.show() 
+0

좋아! 이 작동합니다. 나는 이것을 일찍 시도했지만 plt.contourf 내부의 v를 놓쳤습니다. 그것이 작동하지 않는 이유입니다. 매우 감사. –

1

동일한 문제가 발생하여이 문제에 대한 구체적인 예 (의미는 없지만)가 생겼습니다. 주석 처리 된 contourf 명령은 색상 한계가 아닌 데이터와 동일한 경계를 갖는 색상 막대를 작성합니다.

tricontourf의 레벨 옵션은이 문제를 해결할 수있는 좋은 방법 인 것처럼 보입니다. 그래야 플롯에서 레벨을 초과하는 값을 포함하려면 extend = 'both'옵션이 필요합니다.

import matplotlib.tri as mtri 
import numpy as np 
from numpy.random import randn 
from matplotlib import colors 

numpy.random.seed(0) 
x = randn(300) 
y = randn(300) 
z = randn(*x.shape) 
triangles = mtri.Triangulation(x, y) 
bounds=np.linspace(-1,1,10) 
# sc = plt.tricontourf(triangles, z, vmax=1., vmin=-1.) 
sc = plt.tricontourf(triangles, z, vmax=1., vmin=-1., levels = bounds,\ 
        extend = 'both') 
cb = colorbar(sc) 
_ = ylim(-2,2) 
_ = xlim(-2,2) 
5

나는이 질문이 버그를 지적했다고 생각했지만 사용법/호환성 제한이되었다. 해결책은 원하는 색상 막대의 범위에 대한 윤곽선을 만들고 extend kwarg를 사용하는 것입니다. 자세한 내용은 this issue을 참조하십시오. 이 솔루션을 제공하는 @tcaswell 덕분에 : 당신이 년 Colorbar 당신은 cbar0.set_ticks로 조정할 수 있습니다, 진드기 마음에 들지 않는 경우 여기에서

import matplotlib.pyplot as plt 
import numpy as np 

x, y = np.mgrid[0:1:0.01, 0:1:0.01] 
r = np.sqrt(x ** 2 + y ** 2) 
z = np.sin(6 * np.pi * r) 

fig0, ax0 = plt.subplots(1, 1,) 
cf0 = ax0.contourf(x, y, z, np.arange(0, .5, .01), 
        extend='both') 
cbar0 = plt.colorbar(cf0,) 

enter image description here

. 이것도 tricontourf과 함께 작동하는지 확인했습니다.

@ tcaswell 코드를 원하는 결과를 얻는 데 필요한 코드로 간소화했습니다. 또한 그는 새로운 viridis 색상 맵을 사용했으나 잘하면 아이디어를 얻을 수 있습니다.

+1

무엇이 컬러 바를 끝 부분에 뾰족하게합니까? – jkokorian

+0

색상 막대의 뾰족한 점은 데이터가 계속 표시되지만 윤곽선 색상 표시가 중지됨을 나타냅니다. 'extend' kwarg를 사용하여 이러한 팁의 존재를 제어 할 수 있습니다. 그러나 이것을 사용하지 않으면 지정한 범위 밖의 채색 (윤곽선)이 없을 것입니다. – farenorth

2

아마도 가장 간단한 방법입니다.

(그림과 같이 코드)

plt.colorbar(boundaries=np.linspace(0,1,5)) 

...