使用Matplotlib绘制带有X和Y数据的热力图

5
我想使用matplotlib中的pcolor或其他热力图库制作一个热力图。我找到了很多好例子,但不知道该如何将我的数据格式化为正确格式,或者使用我的数据格式进行绘图。
以下是我的数据设置方式:
X  Y  Value
0  1  .6
0  2  .3
0  3  .2
1  1  .8
1  2  .4
1  3  .9

因此,XY列表示(X,Y)对,其中Value是相应单元格的值。我在努力寻找一种方法来将数据转换为可以使用pcolor或其他绘图方法的格式。任何帮助都将不胜感激。

这个官方文档链接提供了一个很好的例子:https://matplotlib.org/3.1.1/gallery/images_contours_and_fields/image_annotated_heatmap.html - loopasam
3个回答

6

看起来你使用了pandas数据框。在将数据透视成表格并使用Seaborn的heatmap方法之前:

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

df = pd.read_clipboard()
table = df.pivot('Y', 'X', 'Value')
ax = sns.heatmap(table)
ax.invert_yaxis()
print(table)
plt.show()

这里输入图片描述

X    0    1
Y
1  0.6  0.8
2  0.3  0.4
3  0.2  0.9

0
我来晚了,但这里有一个只使用matplotlib的解决方案,正如所请求的那样。它依赖于使用imshowextent选项来完成任务。更多信息,请参见matplotlib手册
import matplotlib.pyplot as plt

xvals = [0,1]
yvals = [1,3]

zvals = [[0.6, 0.3, 0.2], [0.8, 0.4, 0.9]]

heatmap, ax = plt.subplots()

im = ax.imshow(zvals,cmap='inferno',extent=[xvals[0],xvals[1],yvals[0],yvals[1]],interpolation='nearest',origin='lower',aspect='auto')
ax.set(xlabel='some x', ylabel='some y')

cbar = heatmap.colorbar(im)
cbar.ax.set_ylabel('stuff')

heatmap.savefig('heatmap.png')

这将导致以下图像

heatmap with specified x-values, y-values, and density data


0

您需要将您的 x 和 y 值转换为 2D 的 numpy 数组。该数组的两个维度分别代表着 x 和 y,而其值会映射到热力图的颜色条上。更多的颜色映射可以在此处找到。

import numpy as np
import matplotlib.pyplot as mpl
import matplotlib.cm as cmap

m = np.array([[.6, .3, .2], [.8, .4, .9]])
mpl.imshow(m, cmap=cmap.hot)
mpl.colorbar()
mpl.show()

生成热力图示例


你的代码中没有x,y关系,而是一个二维矩阵,里面有数值。生成的图像是基于你提供的数值生成的,它们都被索引到3,带有一些“-half”偏移量。 - Grzegorz Krug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接