我想制作你在下面看到的這種型別的圖表。我知道我可以像這樣用 matplotlib 制作矩陣圖
cmap = colors.ListedColormap(['white','red'])
data = [
[0,0,0,0,0,1,1,1,1,],
[0,0,0,0,0,1,0,0,1,],
]
plt.figure(figsize=(9,5))
plt.pcolor(data[::-1],cmap=cmap,edgecolors='k', linewidths=3)
plt.xlabel('Problem')
plt.ylabel('Particpant')
plt.show()
但是我將如何添加要包含在此圖中的百分比?

uj5u.com熱心網友回復:
您可以添加輔助 x 軸 ( ax.twiny()),使用頂部軸進行編號,使用底部軸顯示百分比。
使用偏移 0.5 的 x 和 y 位置串列呼叫pcolor會將刻度和刻度標簽放在整數位置。clip_on=False確保外部單元格邊界與其余單元格邊界具有相同的厚度。ax.invert_yaxis()讓您反轉 y 軸(因此您可以使用data而不是data[::-1])。
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
cmap = ListedColormap(['white', 'orangered'])
data = np.random.randint(0, 3, size=(28, 30)) % 2
data[:, 9] = 1 # one full column to simulate 100%
data[:, 11] = 0 # one empty column to simulate 0%
fig, ax = plt.subplots(figsize=(9, 5))
ax.pcolor(np.arange(data.shape[1] 1) 0.5, np.arange(data.shape[0] 1) 0.5, data,
cmap=cmap, edgecolors='k', linewidths=3, clip_on=False)
ax.set_yticks(range(1, data.shape[0] 1))
ax.set_xticks(range(1, data.shape[1] 1))
ax.set_xticklabels([f'{p:.0f}' for p in data.mean(axis=0) * 100])
ax.invert_yaxis()
ax2 = ax.twiny()
ax2.set_xlim(ax.get_xlim())
ax2.set_xticks(range(1, data.shape[1] 1))
ax2.set_xlabel('Problem')
ax.tick_params(length=0)
ax2.tick_params(length=0)
ax.set_ylabel('Particpant')
plt.tight_layout()
plt.show()

減小字體大小(或增加figsize)還可以顯示百分號:
ax.set_xticklabels([f'{p:.0f}%' for p in data.mean(axis=0) * 100], fontsize=8)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454517.html
標籤:Python matplotlib 矩阵 图形 海运
