如何在 python 中以 2 种不同的比例为 2 列创建热图?
How to create a heatmap for 2 columns at 2 different scales in python?
我正在尝试创建一个热图,它允许我表示同一数据框中的两个不同列。我希望在热图的右侧有 2 个颜色条来表示每列的比例。这是我的数据框的一部分(完整的数据框包含 244 行):
Country Count Score
------------------------------
America 12455 1.23
Mexico 245667 16.22
China 12221 5.445
Belgium 345632 8.23
Turkey 12342 11.4
India 45643 4.2
China 123556 17.8
我希望我可以沿着 y 轴列出国家名称,然后有两个 x 轴地图用于计数和分数以及不同的比例 - 然后在侧面有一个颜色条用于计数和得分分开。
是否可以使用 seaborn 创建类似的东西?
我附上了一个示例,说明我希望热图看起来像这样:
谢谢
您可以使用 imshow()
相当轻松地创建热图 "by hand"。这只是使用 extent=
关键字将生成的图像正确放置在坐标区中的问题。
fig, ax = plt.subplots()
N = df.index.size
# first heatmap
im1 = ax.imshow(np.vstack([df['Count'],df['Count']]).T, aspect='auto', extent=[-0.5,0.5,-0.5,N-0.5], origin='lower', cmap='magma')
# second heatmap
im2 = ax.imshow(np.vstack([df['Score'],df['Score']]).T, aspect='auto', extent=[0.5,1.5,-0.5,N-0.5], origin='lower', cmap='Blues')
cbar1 = fig.colorbar(im1, ax=ax, label='Count')
cbar2 = fig.colorbar(im2, ax=ax, label='Score')
ax.set_xlim(-0.5,1.5)
ax.set_xticks([0,1])
ax.set_xticklabels(['Count','Score'])
ax.set_yticks(range(N))
ax.set_yticklabels(df['Country'])
ax.set_ylabel('Countries')
fig.tight_layout()
plt.show()
我正在尝试创建一个热图,它允许我表示同一数据框中的两个不同列。我希望在热图的右侧有 2 个颜色条来表示每列的比例。这是我的数据框的一部分(完整的数据框包含 244 行):
Country Count Score
------------------------------
America 12455 1.23
Mexico 245667 16.22
China 12221 5.445
Belgium 345632 8.23
Turkey 12342 11.4
India 45643 4.2
China 123556 17.8
我希望我可以沿着 y 轴列出国家名称,然后有两个 x 轴地图用于计数和分数以及不同的比例 - 然后在侧面有一个颜色条用于计数和得分分开。 是否可以使用 seaborn 创建类似的东西?
我附上了一个示例,说明我希望热图看起来像这样:
谢谢
您可以使用 imshow()
相当轻松地创建热图 "by hand"。这只是使用 extent=
关键字将生成的图像正确放置在坐标区中的问题。
fig, ax = plt.subplots()
N = df.index.size
# first heatmap
im1 = ax.imshow(np.vstack([df['Count'],df['Count']]).T, aspect='auto', extent=[-0.5,0.5,-0.5,N-0.5], origin='lower', cmap='magma')
# second heatmap
im2 = ax.imshow(np.vstack([df['Score'],df['Score']]).T, aspect='auto', extent=[0.5,1.5,-0.5,N-0.5], origin='lower', cmap='Blues')
cbar1 = fig.colorbar(im1, ax=ax, label='Count')
cbar2 = fig.colorbar(im2, ax=ax, label='Score')
ax.set_xlim(-0.5,1.5)
ax.set_xticks([0,1])
ax.set_xticklabels(['Count','Score'])
ax.set_yticks(range(N))
ax.set_yticklabels(df['Country'])
ax.set_ylabel('Countries')
fig.tight_layout()
plt.show()