Python 中配对数据的热图

Heatmap with Paired Data in Python

我正在尝试在 Python 中制作热图。我制作的数据框如下所示。

custom_vals = [[.0, .0], [0,5], [0,10], [0,15], [0,20], [0,25],
               [5,0], [5,5], [5,10], [5,15], [5,20], [5,25],
               [10,0], [10,5], [10,10], [10,15], [10,20], [10,25],
               [15,0], [15,5], [15,10], [15,15], [15,20], [15,25],
               [20,0], [20,5], [20,10], [20,15], [20,20], [20,25], 
               [25,0], [25,5], [25,10], [25,15], [25,20], [25,25]] # ordered pairs (G, H)
custom_predict = (np.around(model.predict(custom_vals), decimals=2))
predicted_vals = pd.DataFrame(data=custom_predict, index = ['0, 0', '0, 5','0, 10', '0, 15', '0, 20', '0, 25',
                                                            '5, 0', '5, 5','5, 10', '5, 15', '5, 20', '5, 25',
                                                            '10, 0', '10, 5','10, 10', '10, 15', '10, 20', '10, 25',
                                                            '15, 0', '15, 5','15, 10', '15, 15', '15, 20', '15, 25',
                                                            '20, 0', '20, 5','20, 10', '20, 15', '20, 20', '20, 25',
                                                            '25, 0', '25, 5','25, 10', '25, 15', '25, 20', '25, 25',], columns=[precip_levels])
predicted_vals 

在图像中,y 轴包含有序对 (GH)。概率表示给定一对 y 值时 x 值的概率。例如上面table中给定g和h=0,x=0的概率是0.87。

我希望能够将其转换为带有概率颜色条的热图。我的目标是分隔有序对(指定为 GH——请参阅上面代码中的注释),使得 G 在 x 轴上并且 H 在 y 轴上。我一次只想担心一个 x 值。例如,我想将类似下面的内容制作成热图。

我怎么能在 Python 中做这样的事情?我对任何图书馆都持开放态度。

我建议使用 seaborn:

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

# Create dummy data
data = np.array(np.random.rand(5, 5))

fig,ax = plt.subplots()
fig.set_figheight(7)
fig.set_figwidth(7)

sns.heatmap(data, annot = True)

plt.show()

Seaborn 是一个很棒的数据可视化库,它也是 pandas 的好朋友。我强烈建议您有一天阅读他们的文档。

对于您的问题,有一个非常简单的解决方案。由于 custom_predict 是通过您的特定函数获得的,因此我使用了一些随机数据作为示例。

由于您在原始数据帧 predicted_vals 中有多个 x 值,我们可能希望根据 x 的所需值(在您的情况下为 0)过滤该值

desired_val = 5
desired_df = pd.DataFrame()

desired_df[desired_val] = predicted_vals[desired_val]
desired_df[['x', 'y']] = custom_vals

此外,我们创建两列xy,它们将是custom_vals提供的坐标。这看起来像这样:

         0    x     y
0,0   0.84  0.0   0.0
0,5   0.06  0.0   5.0
0,10  0.95  0.0  10.0
0,15  0.70  0.0  15.0
0,20  0.19  0.0  20.0

接下来我们需要它看起来像一个真正的热图,由 DataFrame 给出,其中 index 对应于 y 值,columuns 对应于 x 值。这是通过使用 pivot_table

实现的
my_heatmap = desired_df.pivot_table(index='x', columns='y', values=desired_val)

这给了我们这样的数据框:

x     0.0   5.0   10.0  15.0  20.0  25.0
y                                       
0.0   0.84  0.73  0.37  0.75  0.55  0.67
5.0   0.06  0.58  0.69  0.86  0.76  0.54
10.0  0.95  0.02  0.59  0.30  0.79  0.36
15.0  0.70  0.10  0.19  0.92  0.04  0.24
20.0  0.19  0.77  0.74  0.12  0.14  0.87
25.0  0.48  0.34  0.99  0.80  0.56  0.43

最后,我们可以绘制热图。我们需要 seabornmatplotlib.pyplot 进行可视化。

import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(my_heatmap, cmap='plasma')
plt.show()

您可以通过将关键字参数 cmap 更改为众多 matplotlib 颜色图名称之一来选择其他颜色图(您可以检查它们 here)。

如果您还有任何问题,请告诉我们!