赞
踩
调用百度地图的API,使用pyecharts(一个由百度开源的数据可视化库),制作一个可视化热力图。
第一步导入包:
- import pandas as pd
- from pyecharts.charts import BMap
- from pyecharts import options as opts
- from pyecharts.globals import ChartType
- from pyecharts.charts import Timeline
- from pyecharts.charts import Map
- import imgkit
第二步,用pandas取出数据:
data = pd.read_excel(r'C:\Users\86130\Desktop\GDP2.xlsx',index_col='time',engine='openpyxl')
第三步对数据格式进行处理:
- for i in range(n):
- row = data.iloc[i,].tolist()
- c1 = 'list%s'%i
- c1 = list(zip(province,row))#地区与数量数据打包为[(),(),...]形式
- time = format(data.index[i], "%Y-%m-%d")#时间格式定义
第四步设置地图
- c = (
- BMap(init_opts=opts.InitOpts(width="1000px", height="600px")) #设置地图长宽
- .add_schema(baidu_ak="WiCunlcjK6L7a8Wu1g2zf5pAlNVZHrq1" #填写你的百度ak
- , center=[120.13066322374, 30.240018034923] #中心点位置
- , zoom=5#缩放比例
- , is_roam=True
- # , map_style={ # 对地图样式进行配置
- # "styleJson": [
- # {
- # "featureType": "water",
- # "elementType": "all",
- # "stylers": {"color": "#044161"},
- # },
- # {
- # "featureType": "land",
- # "elementType": "all",
- # "stylers": {"color": "#004981"},
- # },
- # {
- # "featureType": "boundary",
- # "elementType": "geometry",
- # "stylers": {"color": "#064f85"},
- # },
- # {
- # "featureType": "railway",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "highway",
- # "elementType": "geometry",
- # "stylers": {"color": "#004981"},
- # },
- # {
- # "featureType": "highway",
- # "elementType": "geometry.fill",
- # "stylers": {"color": "#005b96", "lightness": 1},
- # },
- # {
- # "featureType": "highway",
- # "elementType": "labels",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "arterial",
- # "elementType": "geometry",
- # "stylers": {"color": "#004981"},
- # },
- # {
- # "featureType": "arterial",
- # "elementType": "geometry.fill",
- # "stylers": {"color": "#00508b"},
- # },
- # {
- # "featureType": "poi",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "green",
- # "elementType": "all",
- # "stylers": {"color": "#056197", "visibility": "off"},
- # },
- # {
- # "featureType": "subway",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "manmade",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "local",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "arterial",
- # "elementType": "labels",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "boundary",
- # "elementType": "geometry.fill",
- # "stylers": {"color": "#029fd4"},
- # },
- # {
- # "featureType": "building",
- # "elementType": "all",
- # "stylers": {"color": "#1a5787"},
- # },
- # {
- # "featureType": "label",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # ]
- # },
- )
-
-
- .add(
- time,
- c1,
- type_="scatter", # scatter为散点图,heatmap为热力图,ChartType.EFFECT_SCATTER为涟漪图
-
-
- symbol_size=10,
- effect_opts=opts.EffectOpts(),
- label_opts=opts.LabelOpts(
- position="top", # 标签位置
- is_show=True, # is_show是否显示标签,点上面的内容
- formatter=JsCode( #formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数
- """function(params) {
- if ('value' in params.data) {
- return params.data.value[2];
- }
- }"""
- ),
-
- )
-
-
-
- )
- .set_global_opts(
- title_opts=opts.TitleOpts(
- title="图",
-
- ),
- tooltip_opts=opts.TooltipOpts( # 标签配置,选中某一个点显示的框
- trigger="item", # 触发类型,item主要用于散点图
- formatter=JsCode( # 显示提示框formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数
- """function(params) {
- if ('value' in params.data) {
- return params.data.name + '<br>' + params.data.value[2];
- }
- }"""
- ),
- # 显示数据,可以去掉经纬度,只显示数值return params.data.value[2] + ': ' + params.data.value[0]+': ' + params.data.value[1];
- ),
- visualmap_opts=opts.VisualMapOpts( # 视觉映射配置
- pos_top="10", # 图例离顶部的距离
- pos_left="10", # 图例离左边边框的距离
- type_="size", # 映射过渡类型,可选,"color", "size" (颜色映射还是大小映射)(重要!!!)
- # 其中color参数使点的颜色随着数值进行变化,size参数使点的大小随着数值进行变化(变大变小)
- max_=300, # 指定 visualMapPiecewise 组件的最大值。
- is_piecewise=True, # 是否分段
- pieces=[ # 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式
- {"max": 149, "min": 20, "label": ">=120", "color": "#B40404"}, # label自定义的文字,color自定义的每一段的颜色
- {"max": 20, "min": 10, "label": "90-119", "color": "#DF0101"},
- {"max": 10, "min": 6, "label": "60-89", "color": "#F78181"},
- {"max": 5, "min": 4, "label": "30-59", "color": "#F5A9A9"},
- {"max": 3, "min": 1, "label": "1-29", "color": "#FFFFCC"},
- {"value": 0, "label": '0', "color": 'grey'} # 专门为特定数据定义样式,例如给值为0的点定义灰色,但是0不能在上面的范围里,否则不显示定义的颜色
- ]
- ),
- )
-
- )

以上地图绘制,参考于此处:
pyecharts基于Bmap绘制地理图标,制作景点客源分布图,数据位置上标明散点,散点大小和颜色随着数值进行变化_威斯登的博客-CSDN博客
第五步打印html:
c.render(r"C:\Users\86130\Desktop\2Bmap1.html")#设置自己的存储地址
第6步:将html打印为图片:
- path_wkimg = r'C:\Users\86130\Desktop\wkhtmltox-0.12.6-1.mxe-cross-win64\wkhtmltox\bin\wkhtmltoimage.exe' # 工具路径
- cfg = imgkit.config(wkhtmltoimage=path_wkimg)
- # 1、将html文件转为图片
- imgkit.from_file(r'C:\Users\86130\Desktop\2Bmap1.html', 'helloworld%s.jpg'%i, config=cfg)
为了有一个连续的效果,所以做个这么的玩意,运行及其缓慢
以下是整体的代码:
- import pandas as pd
- from pyecharts.charts import BMap
- from pyecharts import options as opts
- from pyecharts.globals import ChartType
- from pyecharts.charts import Timeline
- from pyecharts.charts import Map
- from pyecharts.commons.utils import JsCode
- import imgkit
-
-
-
- data = pd.read_excel(r'C:\Users\86130\Desktop\dtsj.xlsx',index_col='time',engine='openpyxl')
- #print(data)
- province = data.columns.tolist()#行的索引
- #province = list(data["province"])
- n = len(data.index)
- #gdp = list(data[1])
- #print(province)
- #print(n)
- #print(list)
-
- for i in range(n):
- row = data.iloc[i,].tolist()
- #print(i)
- #print(row)
- c1 = 'list%s'%i
- #c1 = [list(z) for z in zip(province,row)]
- c1 = list(zip(province,row))
- #print(c1)
- #print(data.index[i])
- #print(1)
- time = format(data.index[i], "%Y-%m-%d")
-
- # time = data.head(1)
-
-
-
- c = (
- BMap(init_opts=opts.InitOpts(width="1000px", height="600px"))
- .add_schema(baidu_ak="WiCunlcjK6L7a8Wu1g2zf5pAlNVZHrq1"
- , center=[120.13066322374, 30.240018034923]
- , zoom=5
- , is_roam=True
- # , map_style={ # 对地图样式进行配置
- # "styleJson": [
- # {
- # "featureType": "water",
- # "elementType": "all",
- # "stylers": {"color": "#044161"},
- # },
- # {
- # "featureType": "land",
- # "elementType": "all",
- # "stylers": {"color": "#004981"},
- # },
- # {
- # "featureType": "boundary",
- # "elementType": "geometry",
- # "stylers": {"color": "#064f85"},
- # },
- # {
- # "featureType": "railway",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "highway",
- # "elementType": "geometry",
- # "stylers": {"color": "#004981"},
- # },
- # {
- # "featureType": "highway",
- # "elementType": "geometry.fill",
- # "stylers": {"color": "#005b96", "lightness": 1},
- # },
- # {
- # "featureType": "highway",
- # "elementType": "labels",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "arterial",
- # "elementType": "geometry",
- # "stylers": {"color": "#004981"},
- # },
- # {
- # "featureType": "arterial",
- # "elementType": "geometry.fill",
- # "stylers": {"color": "#00508b"},
- # },
- # {
- # "featureType": "poi",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "green",
- # "elementType": "all",
- # "stylers": {"color": "#056197", "visibility": "off"},
- # },
- # {
- # "featureType": "subway",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "manmade",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "local",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "arterial",
- # "elementType": "labels",
- # "stylers": {"visibility": "off"},
- # },
- # {
- # "featureType": "boundary",
- # "elementType": "geometry.fill",
- # "stylers": {"color": "#029fd4"},
- # },
- # {
- # "featureType": "building",
- # "elementType": "all",
- # "stylers": {"color": "#1a5787"},
- # },
- # {
- # "featureType": "label",
- # "elementType": "all",
- # "stylers": {"visibility": "off"},
- # },
- # ]
- # },
- )
-
-
- .add(
- time,
- c1,
- type_="scatter", # scatter为散点图,heatmap为热力图,ChartType.EFFECT_SCATTER为涟漪图
-
-
- symbol_size=10,
- effect_opts=opts.EffectOpts(),
- label_opts=opts.LabelOpts(
- position="top", # 标签位置
- is_show=True, # is_show是否显示标签,点上面的内容
- formatter=JsCode( #formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数
- """function(params) {
- if ('value' in params.data) {
- return params.data.value[2];
- }
- }"""
- ),
-
- )
-
-
-
- )
- .set_global_opts(
- title_opts=opts.TitleOpts(
- title="图",
-
- ),
- tooltip_opts=opts.TooltipOpts( # 标签配置,选中某一个点显示的框
- trigger="item", # 触发类型,item主要用于散点图
- formatter=JsCode( # 显示提示框formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数
- """function(params) {
- if ('value' in params.data) {
- return params.data.name + '<br>' + params.data.value[2];
- }
- }"""
- ),
- # 显示数据,可以去掉经纬度,只显示数值return params.data.value[2] + ': ' + params.data.value[0]+': ' + params.data.value[1];
- ),
- visualmap_opts=opts.VisualMapOpts( # 视觉映射配置
- pos_top="10", # 图例离顶部的距离
- pos_left="10", # 图例离左边边框的距离
- type_="size", # 映射过渡类型,可选,"color", "size" (颜色映射还是大小映射)(重要!!!)
- # 其中color参数使点的颜色随着数值进行变化,size参数使点的大小随着数值进行变化(变大变小)
- max_=300, # 指定 visualMapPiecewise 组件的最大值。
- is_piecewise=True, # 是否分段
- pieces=[ # 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式
- {"max": 149, "min": 20, "label": ">=120", "color": "#B40404"}, # label自定义的文字,color自定义的每一段的颜色
- {"max": 20, "min": 10, "label": "90-119", "color": "#DF0101"},
- {"max": 10, "min": 6, "label": "60-89", "color": "#F78181"},
- {"max": 5, "min": 4, "label": "30-59", "color": "#F5A9A9"},
- {"max": 3, "min": 1, "label": "1-29", "color": "#FFFFCC"},
- {"value": 0, "label": '0', "color": 'grey'} # 专门为特定数据定义样式,例如给值为0的点定义灰色,但是0不能在上面的范围里,否则不显示定义的颜色
- ]
- ),
- )
-
- )
- c.render(r"C:\Users\86130\Desktop\2Bmap1.html")
-
- path_wkimg = r'C:\Users\86130\Desktop\wkhtmltox-0.12.6-1.mxe-cross-win64\wkhtmltox\bin\wkhtmltoimage.exe' # 工具路径
- cfg = imgkit.config(wkhtmltoimage=path_wkimg)
- # 1、将html文件转为图片
- imgkit.from_file(r'C:\Users\86130\Desktop\2Bmap1.html', 'helloworld%s.jpg'%i, config=cfg)
-
-
-

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。