programing

matplotlib: 색상 막대 및 텍스트 레이블

batch 2023. 7. 20. 21:48
반응형

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()

그러면 다음 그림이 생성됩니다.

pmesh plot

이상적으로는 네 가지 색상과 각 색상에 대한 레이블이 중앙에 있는 범례 막대를 생성하고 싶습니다.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()

당신은 매우 가까웠습니다.색상 막대 축에 대한 참조가 있으면 텍스트 레이블을 가운데에 놓는 것을 포함하여 원하는 모든 작업을 수행할 수 있습니다.더 잘 보이도록 포맷을 사용하여 재생할 수 있습니다.

demo

타코웰의 대답에 덧붙이자면,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

반응형