使用Matplotlib的Hexbin创建热图
我不是程序员,但最近我在用Python做一些数据分析,偶然发现了Matplotlib这个工具。我有一系列地理坐标的数据点,想把它们可视化。数据包括地理坐标和每个地点的平方英尺数(SQFT):
纬度,经度,平方英尺
我大约有2.5万条这样的数据点,想在一个二维图像上展示这些平方英尺的总和;简单来说,就是想制作一个平方英尺的热力图。我已经用Matplotlib创建了一个六边形图(hexbin),用的是纬度和经度的数据,但这个图只能告诉我有多少个数据点落在每个六边形里。我搞不清楚怎么把平方英尺的数据加到这些六边形里。我查了Matplotlib的文档,发现可以输入一个额外的变量,他们称之为C,但我不知道该怎么格式化这些数据(或者这是否真的能满足我的需求)。
1 个回答
2
正如@Brian L的评论所说,要在每个单元格中获得累计的平方英尺值,你需要把reduce_C_function
改成sum
。这意味着Matplotlib会使用Python的sum
函数(默认是用平均值函数)来根据C
(在这个例子中是SQFT)来决定那个区域的颜色。下面是一个使用随机生成数据的例子。
import numpy as np
import matplotlib.pyplot as plt
plt.close("all")
N = 158 # OP said 25k datapoints; sqrt(25000) ~ 158
latitude = np.random.standard_normal(N**2)
longitude = 12 * np.random.standard_normal(N**2)
var = 100
SQFT = 1_000*np.exp(-(latitude**2 + longitude**2)/2/var)/2/np.pi/var + 1
fig, ax = plt.subplots()
p = ax.hexbin(longitude, latitude, C=SQFT, gridsize=50, reduce_C_function=sum)
fig.colorbar(p, ax=ax, label="SQFT")
ax.set_xlabel("Longitude")
ax.set_ylabel("Latitude")
fig.show()