首页 > 解决方案 > 2D Heatmap 使用 python 处理已经分箱的数据

问题描述

我想为已经分箱的数据集获取 2D 热图(使用 python),这样我有 x 和 y 的左右边缘,然后是我感兴趣的数据(我想要颜色映射)作为 x 的函数和y。

我在下面给出了我的数据集的示例:

x_min x_max y_min y_max 数据
1 2 0 0.1 10
2 3 0 0.1 13
3 4 0 0.1 12
4 5 0 0.1 20
1 2 0.1 0.2 9
2 3 0.1 0.2 17
3 4 0.1 0.2 22
4 5 0.1 0.2 30

我想绘制如下所示的 2D 热图: 2D 热图

这怎么可能让我得到一个热图,Y 轴从 0 到 0.2,X 轴从 1 到 5,以及一个依赖于“数据”的颜色条?

谢谢!

标签: pythonmatplotlibplotseabornheatmap

解决方案


plt.imshow()可以如下使用:

import matplotlib.pyplot as plt
import pandas as pd
from io import StringIO

data_str = '''
x_min   x_max   y_min   y_max   Data
1   2   0   0.1 10
2   3   0   0.1 13
3   4   0   0.1 12
4   5   0   0.1 20
1   2   0.1 0.2 9
2   3   0.1 0.2 17
3   4   0.1 0.2 22
4   5   0.1 0.2 30'''
df = pd.read_csv(StringIO(data_str), delim_whitespace=True)

plt.imshow(df['Data'].to_numpy().reshape(2, 4), origin='lower', extent=[1, 5, 0, 0.2], aspect='auto', cmap='plasma')
plt.colorbar()
plt.xticks(range(1, 6))
plt.yticks([0, 0.1, 0.2])
for row in df.itertuples(index=False):
    plt.text((row.x_min + row.x_max) / 2, (row.y_min + row.y_max) / 2, f"{row.Data:.0f}",
             color='navy' if row.Data > 22 else 'yellow', size=20, ha='center', va='center')
plt.show()

示例热图


推荐阅读