반응형
matplotlib: 색상 막대 및 텍스트 레이블
다음을 만들고 싶습니다.colorbar
전설적인heatmap
레이블이 각 이산 색상의 중심에 있도록 합니다.여기서 차용한 예:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
#discrete color scheme
cMap = ListedColormap(['white', 'green', 'blue','red'])
#data
np.random.seed(42)
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=cMap)
#legend
cbar = plt.colorbar(heatmap)
cbar.ax.set_yticklabels(['0','1','2','>3'])
cbar.set_label('# of contacts', rotation=270)
# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False)
ax.invert_yaxis()
#labels
column_labels = list('ABCD')
row_labels = list('WXYZ')
ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)
plt.show()
그러면 다음 그림이 생성됩니다.
이상적으로는 네 가지 색상과 각 색상에 대한 레이블이 중앙에 있는 범례 막대를 생성하고 싶습니다.0,1,2,>3
어떻게 이를 달성할 수 있습니까?
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
#discrete color scheme
cMap = ListedColormap(['white', 'green', 'blue','red'])
#data
np.random.seed(42)
data = np.random.rand(4, 4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=cMap)
#legend
cbar = plt.colorbar(heatmap)
cbar.ax.get_yaxis().set_ticks([])
for j, lab in enumerate(['$0$','$1$','$2$','$>3$']):
cbar.ax.text(.5, (2 * j + 1) / 8.0, lab, ha='center', va='center')
cbar.ax.get_yaxis().labelpad = 15
cbar.ax.set_ylabel('# of contacts', rotation=270)
# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False)
ax.invert_yaxis()
#labels
column_labels = list('ABCD')
row_labels = list('WXYZ')
ax.set_xticklabels(column_labels, minor=False)
ax.set_yticklabels(row_labels, minor=False)
plt.show()
당신은 매우 가까웠습니다.색상 막대 축에 대한 참조가 있으면 텍스트 레이블을 가운데에 놓는 것을 포함하여 원하는 모든 작업을 수행할 수 있습니다.더 잘 보이도록 포맷을 사용하여 재생할 수 있습니다.
타코웰의 대답에 덧붙이자면,colorbar()
함수에 옵션이 있습니다.cax
색상 막대를 그릴 축을 전달하는 데 사용할 수 있는 입력입니다.해당 입력을 사용하는 경우 해당 축을 사용하여 레이블을 직접 설정할 수 있습니다.
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig, ax = plt.subplots()
heatmap = ax.imshow(data)
divider = make_axes_locatable(ax)
cax = divider.append_axes('bottom', size='10%', pad=0.6)
cb = fig.colorbar(heatmap, cax=cax, orientation='horizontal')
cax.set_xlabel('data label') # cax == cb.ax
이렇게 하면 레이블을 추가하고 색상 막대의 눈금 및 레이블 크기를 변경할 수 있습니다.
clb=plt.colorbar()
clb.ax.tick_params(labelsize=8)
clb.ax.set_title('Your Label',fontsize=8)
이는 하위 로트가 있는 경우에도 사용할 수 있습니다.
plt.tight_layout()
plt.subplots_adjust(bottom=0.05)
cax = plt.axes([0.1, 0, 0.8, 0.01]) #Left,bottom, length, width
clb=plt.colorbar(cax=cax,orientation="horizontal")
clb.ax.tick_params(labelsize=8)
clb.ax.set_title('Your Label',fontsize=8)
언급URL : https://stackoverflow.com/questions/15908371/matplotlib-colorbars-and-its-text-labels
반응형
'programing' 카테고리의 다른 글
프록시 뒤에 배포된 springdoc-openapi-ui(Swager UI)의 "Generated server url"이 잘못됨 (0) | 2023.07.20 |
---|---|
where 절의 날짜/시간 (0) | 2023.07.20 |
가져오기 오류: psycopg2라는 모듈이 없습니다. (0) | 2023.07.20 |
숫자가 들어 있는 문자열을 올바르게 정렬하는 방법은 무엇입니까? (0) | 2023.07.20 |
IPython 노트북을 올바르게 닫는 방법은 무엇입니까? (0) | 2023.07.20 |