matplotlib에서 컬러 바 범위 설정
다음 코드가 있습니다.
import matplotlib.pyplot as plt
cdict = {
'red' : ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)),
'green': ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)),
'blue' : ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45))
}
cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)
plt.clf()
plt.pcolor(X, Y, v, cmap=cm)
plt.loglog()
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.colorbar()
plt.show()
따라서 지정된 컬러 맵을 사용하여 X 축과 Y 축에 값 'v'의 그래프가 생성됩니다. X 및 Y 축은 완벽하지만 컬러 맵이 최소값과 최대 값의 v 사이에 퍼집니다. 컬러 맵의 범위를 0과 1 사이로 설정하고 싶습니다.
나는 다음을 사용하려고 생각했다.
plt.axis(...)
축의 범위를 설정하려면 컬러 맵이 아닌 X 및 Y의 최소 및 최대 인수 만 사용합니다.
편집하다:
명확성을 위해 값 범위가 (0 ... 0.3) 인 그래프와 값이 (0.2 ... 0.8) 인 그래프가 있다고 가정하겠습니다.
두 그래프 모두에서 컬러 바의 범위를 (0 ... 1)로 설정하려고합니다. 두 그래프 모두 위의 전체 범위를 사용 하여이 색상 범위가 동일하기를 원합니다 (두 그래프의 0.25는 동일한 색상입니다). 첫 번째 그래프에서 0.3과 1.0 사이의 모든 색상은 그래프에 표시되지 않지만 측면의 색상 막대 키에는 표시됩니다. 다른 한편으로, 0과 0.2 사이, 0.8과 1 사이의 모든 색상은 그래프에 표시되지 않지만 측면의 색상 막대에 표시됩니다.
색상 범위를 사용 vmin
하고 vmax
강제로 적용합니다. 예를 들면 다음과 같습니다.
import matplotlib as m
import matplotlib.pyplot as plt
import numpy as np
cdict = {
'red' : ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)),
'green': ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)),
'blue' : ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45))
}
cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)
x = np.arange(0, 10, .1)
y = np.arange(0, 10, .1)
X, Y = np.meshgrid(x,y)
data = 2*( np.sin(X) + np.sin(3*Y) )
def do_plot(n, f, title):
#plt.clf()
plt.subplot(1, 3, n)
plt.pcolor(X, Y, f(data), cmap=cm, vmin=-4, vmax=4)
plt.title(title)
plt.colorbar()
plt.figure()
do_plot(1, lambda x:x, "all")
do_plot(2, lambda x:np.clip(x, -4, 0), "<0")
do_plot(3, lambda x:np.clip(x, 0, 4), ">0")
plt.show()
CLIM 기능을 사용하십시오 ( MATLAB의 CAXIS 기능 과 동일 ).
plt.pcolor(X, Y, v, cmap=cm)
plt.clim(-4,4)
plt.show()
이것이 가장 우아한 솔루션인지 확실하지 않지만 (이것이 내가 사용한 것입니다) 데이터를 0에서 1 사이의 범위로 조정 한 다음 컬러 바를 수정할 수 있습니다.
import matplotlib as mpl
...
ax, _ = mpl.colorbar.make_axes(plt.gca(), shrink=0.5)
cbar = mpl.colorbar.ColorbarBase(ax, cmap=cm,
norm=mpl.colors.Normalize(vmin=-0.5, vmax=1.5))
cbar.set_clim(-2.0, 2.0)
With the two different limits you can control the range and legend of the colorbar. In this example only the range between -0.5 to 1.5 is show in the bar, while the colormap covers -2 to 2 (so this could be your data range, which you record before the scaling).
따라서 컬러 맵을 스케일링하는 대신 데이터를 스케일링하고 컬러 바를 그에 맞 춥니 다.
Using figure environment and .set_clim()
여러 플롯이있는 경우이 대안이 더 쉽고 안전 할 수 있습니다.
import matplotlib as m
import matplotlib.pyplot as plt
import numpy as np
cdict = {
'red' : ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)),
'green': ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)),
'blue' : ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45))
}
cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024)
x = np.arange(0, 10, .1)
y = np.arange(0, 10, .1)
X, Y = np.meshgrid(x,y)
data = 2*( np.sin(X) + np.sin(3*Y) )
data1 = np.clip(data,0,6)
data2 = np.clip(data,-6,0)
vmin = np.min(np.array([data,data1,data2]))
vmax = np.max(np.array([data,data1,data2]))
fig = plt.figure()
ax = fig.add_subplot(131)
mesh = ax.pcolormesh(data, cmap = cm)
mesh.set_clim(vmin,vmax)
ax1 = fig.add_subplot(132)
mesh1 = ax1.pcolormesh(data1, cmap = cm)
mesh1.set_clim(vmin,vmax)
ax2 = fig.add_subplot(133)
mesh2 = ax2.pcolormesh(data2, cmap = cm)
mesh2.set_clim(vmin,vmax)
# Visualizing colorbar part -start
fig.colorbar(mesh,ax=ax)
fig.colorbar(mesh1,ax=ax1)
fig.colorbar(mesh2,ax=ax2)
fig.tight_layout()
# Visualizing colorbar part -end
plt.show()
단일 컬러 바
가장 좋은 대안은 전체 플롯에 단일 색상 막대를 사용하는 것입니다. 그렇게 여러 가지 방법이 있습니다 이 튜토리얼은 최선의 선택을 이해하는 데 매우 유용하다. 코드 의 이전 시각화 색상 막대 부분 대신 복사하여 붙여 넣을 수있는이 솔루션을 선호 합니다.
fig.subplots_adjust(bottom=0.1, top=0.9, left=0.1, right=0.8,
wspace=0.4, hspace=0.1)
cb_ax = fig.add_axes([0.83, 0.1, 0.02, 0.8])
cbar = fig.colorbar(mesh, cax=cb_ax)
추신
나는 그것이 더 빠르기 때문에 pcolormesh
대신에 사용 하는 것이 좋습니다 pcolor
(더 많은 정보는 여기 ).
참고 URL : https://stackoverflow.com/questions/3373256/set-colorbar-range-in-matplotlib
'IT' 카테고리의 다른 글
자바 스크립트에서 선택적 매개 변수 처리 (0) | 2020.07.05 |
---|---|
Gemfile을 찾을 수 없습니다 (0) | 2020.07.05 |
자바 스크립트에서 지역 / 코드 축소를 구현하는 방법 (0) | 2020.07.05 |
OS X의 LLVM 대 클랑 (0) | 2020.07.05 |
양식 제출 jQuery에서 기본값 방지 (0) | 2020.07.05 |