gpt4 book ai didi

python - 如何在一个图中创建多个具有共享图例的seaborn热图?

转载 作者:行者123 更新时间:2023-12-03 18:44:54 24 4
gpt4 key购买 nike

我想在一个图中创建多个(此处:两个)seaborn 热图,其中热图具有不同的值范围,但应包含一个共享的图例。

以下代码在一个图中创建了两个热图,但两个图的颜色编码不同。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame(np.random.random((4,4)))
df2 = pd.DataFrame([1., .5, .9, .6])

fig, ax = plt.subplots(ncols=2, sharey=True)

sns_g = sns.heatmap(df, annot=True, yticklabels=True, ax=ax[0])
sns_g2 = sns.heatmap(df2, annot=True, cbar=False, ax=ax[1])

# fig.subplots_adjust(right=0.6)
# cbar_ax = fig.add_axes([1.1, 0.15, 0.05, .77])
# fig.colorbar(ax[1], cax=cbar_ax)

plt.tight_layout()

plt.show()

我在 sns_g 中包含 cbar=True 只是为了表明两个图例代表不同的范围。我想明确创建两个图。

最佳答案

如果您想手动创建颜色条,您可以在网格中为其保留一个轴。使用 vminvmax指定限制,并使用其中一个热图(例如 axs[0].collections[0])作为 fig.colorbar 的 ScalarMappable 输入.

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame(np.random.random((4,4)))
df2 = pd.DataFrame([1., .5, .9, .6])

vmin = min(df.values.min(), df2.values.min())
vmax = max(df.values.max(), df2.values.max())

fig, axs = plt.subplots(ncols=3, gridspec_kw=dict(width_ratios=[4,1,0.2]))

sns.heatmap(df, annot=True, cbar=False, ax=axs[0], vmin=vmin)
sns.heatmap(df2, annot=True, yticklabels=False, cbar=False, ax=axs[1], vmax=vmax)

fig.colorbar(axs[1].collections[0], cax=axs[2])

plt.show()

enter image description here

关于python - 如何在一个图中创建多个具有共享图例的seaborn热图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56478320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com