matplotlib 提高热图的“精度”

a2mppw5e  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(154)

使用seaborn,我正在为DataFrame的各个系列生成热图。
我使用的主要代码如下:

def plot_heatmap(data, cmap, x_label, y_label, y_ticks = None):

    fig, ax = plt.subplots()

    heatmap = sns.heatmap([data], robust=True,cmap=cmap, annot=False, cbar_kws={"label": "Value"}, ax=ax)

    ax.set_xlabel(x_label)
    ax.set_ylabel(y_label)
    if y_ticks:
        heatmap.set_yticklabels([y_ticks])

    plt.show()

字符串
并且它是在每个案例中调用的(对于每个Pandas.Series)。我的问题是生成的结果看起来像这样:
x1c 0d1x的数据
但问题是,这看起来有点欺骗性。我为这个图生成了以下随机数据集:gist for dataset
你看到的0的个数是1,但是有人,观察这个图,会有不同的想法。
那么,我如何改进这个图,使其更准确?我尝试了各种cmap,如:

cmap = sns.diverging_palette(220, 10, as_cmap=True) 
    cmap2 = sns.diverging_palette(250, 0, sep=1, n=256, as_cmap=True)
    cmap3 = 'gist_rainbow'
    ...


但是我没有得到想要的结果。提前谢谢你!

bybem2ql

bybem2ql1#

你有一个巨大的范围尺度。你可以尝试绘制一个对数的数据:
第一个月
x1c 0d1x的数据
您可以对数据进行分组并绘制分组/类别。例如,0到10之间的值是一种颜色,大于1 e20的值是另一种颜色。您可以以任何适合您的数据集或您想要显示的方式定义分组。在下面的第一个示例中,我在log10空间中创建了20个等距分组。

bins = np.logspace(np.log10(0.1), np.log10(df["data"].max()), 20)
labels = np.arange(1, len(bins))

df["binned"] = pd.cut(df["data"], bins=bins, labels=labels)

plot_heatmap(df["binned"], cmap="magma", x_label="asdf", y_label="asdf")

字符串



在这里,我手动定义bin的值:

bins = [-1, 100, 1e6, 1e9, df["data"].max()]
labels = np.arange(1, len(bins))

df["binned"] = pd.cut(df["data"], bins=bins, labels=labels)

plot_heatmap(df["binned"], cmap="magma", x_label="asdf", y_label="asdf")


相关问题