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 轴包含有序对 (G
、H
)。概率表示给定一对 y 值时 x 值的概率。例如上面table中给定g和h=0,x=0的概率是0.87。
我希望能够将其转换为带有概率颜色条的热图。我的目标是分隔有序对(指定为 G
和 H
——请参阅上面代码中的注释),使得 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
此外,我们创建两列x
和y
,它们将是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
最后,我们可以绘制热图。我们需要 seaborn
和 matplotlib.pyplot
进行可视化。
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(my_heatmap, cmap='plasma')
plt.show()
您可以通过将关键字参数 cmap
更改为众多 matplotlib 颜色图名称之一来选择其他颜色图(您可以检查它们 here)。
如果您还有任何问题,请告诉我们!
我正在尝试在 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 轴包含有序对 (G
、H
)。概率表示给定一对 y 值时 x 值的概率。例如上面table中给定g和h=0,x=0的概率是0.87。
我希望能够将其转换为带有概率颜色条的热图。我的目标是分隔有序对(指定为 G
和 H
——请参阅上面代码中的注释),使得 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
此外,我们创建两列x
和y
,它们将是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
最后,我们可以绘制热图。我们需要 seaborn
和 matplotlib.pyplot
进行可视化。
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(my_heatmap, cmap='plasma')
plt.show()
您可以通过将关键字参数 cmap
更改为众多 matplotlib 颜色图名称之一来选择其他颜色图(您可以检查它们 here)。
如果您还有任何问题,请告诉我们!