前言
- 工作中,上司要求对于一些数据以热力图的形式进行显示出来,能够更加直观的对于不同的数据继续对比查看.
- 查看网上各大博客, 关于python绘制热力图的博客文章有很多,但是发觉绝大多数都是直接在中国地图或者世界地图上甚至于是 某个城市的地图上进行绘制热力图,也就是说,热力图的底图是无法改变的,比较有印象的四种方法,如下:
- 利用folium 来绘制
https://blog.csdn.net/ouening/article/details/78882094
- 利用百度提供的热力图api来绘制
http://www.sohu.com/a/252907392_453160
- 通过地图慧网站来绘制热力图
https://jingyan.baidu.com/article/e4d08ffd7beec10fd2f60d38.html
- 通过excel来绘制热力图
https://www.jianshu.com/p/123cb5780694
- 以上的方式绘制热力图很方便,并且能够完美的绘制热力图,但是可惜的是, 以上方式并没有解决我的困难,以上都是直接在网络地图上绘制热力图,而,我的难题为:
- 终究,功夫不负有心人,找到了几篇内容相差无几的博客,虽然不是特别的详细,但是我发觉里边共用的一个包,是可以解决我的问题的, 经过查看源代码,解读,最终绘制成功
- 在这,总结一下此包的相关函数和参数,以备日后查看.
pyheatmouap
- 这个库,貌似是由一个大佬将他的一个项目中的一些代码抽调出来封装而成,所以,想要找到特别详细的相关解释和注释很困难.在库的一些函数的注释中,也并没有像是大多数库一样,对于函数和相关参数有大量的解释,以下,我只会对于我用到的一些函数进行解释.
- 首先,导入pyheatmouap库中关于热力图的类
from pyheatmap.heatmap import HeatMap
- 实例化这个类,此类有四个初始化参数:
- data
- 以二维列表或者元组的形式,传入每个 热力点的横纵坐标以及热力值
- 可以不传入热力值,默认为 1
- 实例 [[x,y,n],[x,y,n]]
- base=None 设置底图,= “路径”
- width=0, 宽度
- height=0 高度
- heatmap函数,使用实例化出来的热力图对象进行绘制热力图,有四个参数:
- save_as=None, 设备图像保存的路径
- base=None, 设置背景
- data=None, 不传即可,后台代码实现,为空,则使用实例化之时的data
- r=10, 设置热力的范围半径
- 代码实例
from pyheatmap.heatmap import HeatMap
def main():
data = []
# 定义坐标和热力值,十个热力点
sdata = ['381,56,23', '409,56,22', '410,141,21',
'200,252,20', '300,56,19', '50,56,18',
'410,141,17','325,252,16', '381,56,15',
'409,455,14', ]
# 这段实际上是 将定义的坐标值转化为 函数接收的形式,[[x,y,n],[x,y,n]]
for ln in sdata:
a = ln.split(",")
if len(a) != 3:
continue
a = [int(i)for i in a]
data.append(a)
# 实例化热力图对象,传入坐标点 和背景图
hm = HeatMap(data,base='bb.png')
# 绘制热力图,并且保存
hm.heatmap(save_as="vv.png")
if __name__ == "__main__":
main()