2013-05-22 1 views
4

의사 색상 플롯 (예 : contour 또는 contourf)과 컬러 바를 만들고 싶습니다. 실용적인 이유로, 나는 컬러 바의 범위를 기본 mappable과 다르게하고 싶습니다.실제 플롯을 변경하지 않고 matplotlib 색상 막대에 제한을 설정하십시오.

아래 예제에서 데이터 Z는 0에서 10000 사이의 범위를 가지며,이 범위는 색상 표에 매핑됩니다. 색상 막대의 범위는 동일합니다.

plot

import numpy 
from matplotlib import pyplot 

X = numpy.arange(100) 
Y = numpy.arange(100) 
Z = numpy.arange(100**2).reshape((100,100)) 

f = pyplot.figure() 
ax = f.gca() 
cf = ax.contourf(X,Y,Z,100) 
cbar = f.colorbar(cf, ticks=[3000,4000,5000,6000]) 

pyplot.show() 

지금, 나는 년 Colorbar에, 즉 "에서 줌은"3000 만 6000의 범위와 년 Colorbar을 생성하고 싶습니다. 이 새로운 색상 막대는 여전히 범례로 사용되며 각 눈금에 적합한 색상을 제공합니다 (3000 = 파란색, 6000 = 노란색). cbar.set_clim()도 아니고 cf.set_clim()도이 작업을 수행 할 수 없습니다.

답변

3

일반적으로 색상 표시 줄의 섹션을 억제하는 것은 나쁜 생각이지만, 여기에는 매우 해킹 된 방법이 있습니다.

import numpy 
from matplotlib import pyplot 

X = numpy.arange(100) 
Y = numpy.arange(100) 
Z = numpy.arange(100**2).reshape((100,100)) 

f = pyplot.figure() 
ax = f.gca() 
cf = ax.contourf(X,Y,Z,100) 
cbar = f.colorbar(cf, ticks=[3000,4000,5000,6000]) 
cbar.ax.set_ylim([cbar.norm(3000), cbar.norm(6000)]) 
cbar.outline.set_ydata([cbar.norm(3000)] * 2 + [cbar.norm(6000)] * 4 + [cbar.norm(3000)] * 3) 
cbar.ax.set_aspect(60) # <- tweak this to get the aspect ratio you want 
pyplot.show() 

컬러 바의 내부 전체를 만지기 때문에 나는 이것을 hacky라고 부릅니다. cbar.outline은 색상 막대 주변의 검은 상자 인 Line2D 개체이며, 보려는 하위 영역과 일치하도록 모서리의 ydata를 설정합니다. 그 라인 밖으로 시도하고 무슨 일이 일어 나는지보십시오.

컬러 맵의 clip 기능을 살펴볼 수 있습니다.

+0

답변 해 주셔서 감사합니다. cbar.outline.set_ydata()가하는 일에 대해 설명해 주시겠습니까? – Jan

+0

@Jan 편집을 참조하십시오. 이 코드를 대화 형 세션에서 실행하고'__dict__','help' 및'type'을 사용하여 코드를 조금 탐험하십시오. – tacaswell