echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!

Pyecharts是一种非常强大的绘图python库,绘制的图形非常好看,并且有代表性,不仅仅是地图,还可以绘制条形图、饼图、词云图等等。

 # 安装方法pip install pyecharts# 或者使用国内镜像:pip install pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple

其中涉及的主要是 geo库和 map库,本次主要是分享 geo库的一些用法。

它们所依赖的地图包主要有(需要说明的是,并不是所有的城市都能找到,因为名字的修改或者简称会造成错误;此时就需要自己加入相应的城市名和其经纬度地址):

全球国家地图: echarts-countries-pypkg        

全球城市地图:echarts-cities-pypkg        

中国省级地图: echarts-china-provinces-pypkg        

中国市级地图: echarts-china-cities-pypkg

 # 安装方法pip install echarts-countries-pypkgpip install echarts-cities-pypkgpip install echarts-china-provinces-pypkgpip install echarts-china-cities-pypkg

现在进入具体使用阶段:

2613200bab017096ec0bacdc9895595d.png

 from pyecharts.faker import Fakerfrom pyecharts import options as optsfrom pyecharts.charts import Geofrom pyecharts.globals import ChartType, SymbolTypeimport pandas as pdimport json# 用于测试的例子,部分取自 Faker ,也就是 from pyecharts.faker import Fakerprovinces = ["广东", "北京", "上海", "辽宁", "湖南", "四川", "西藏"]guangdong_city = ["汕头市", "汕尾市", "揭阳市", "阳江市", "肇庆市", "广州市", "惠州市"]country = ["China", "Canada", "Brazil", "Russia", "United States", "Africa", "Germany"]value = [300, 100, 2000, 800, 10000, 400, 5000]

2613200bab017096ec0bacdc9895595d.png

\1. 绘制热点图

2613200bab017096ec0bacdc9895595d.png

 # 热点图def geo_heatmap(address, value) -> Geo:    aa = [list(z) for z in zip(address, value)]    c = (        Geo()        .add_schema(maptype="china")        .add(            "省热点图",    #图题            aa,            type_=ChartType.HEATMAP,   #地图类型        )        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  #设置是否显示标签        .set_global_opts(                visualmap_opts=opts.VisualMapOpts(max_ = 400),    #设置legend显示的最大值                title_opts=opts.TitleOpts(),   #左上角标题        )    )    return cif __name__ == '__main__':    province_heat = geo_heatmap(provinces, value)    province_heat.render(path="test_heatmap.html") #保存为html文件(网页打开,是动图),也可以保存为 png 等格式,也就是 province_heat.render(path='test_heatmap.png')

2613200bab017096ec0bacdc9895595d.png

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第1张图片

\2. 路线图

2613200bab017096ec0bacdc9895595d.png

 # 路线图def geo_lines() -> Geo:    c = (        Geo()#        .add_schema(maptype="china")        .add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="#FFD39B", border_color="#111")) #用于修改背景地图的颜色        .add(            "数量",            [("广州", 100), ("乌鲁木齐", 66), ("济南", 500), ("武汉", 1000)],  #参数是由元组项组成的列表            type_=ChartType.EFFECT_SCATTER,    #动态热力图            color="blue",        )        .add(            "流向",            [("广州", "拉萨"), ("乌鲁木齐", "北京"), ("济南", "杭州"), ("武汉", "重庆")], #参数是由元组项组成的列表            type_=ChartType.LINES,            effect_opts=opts.EffectOpts(                symbol=SymbolType.ARROW, symbol_size=10, color="black"#                symbol=SymbolType.ARROW, symbol_size=6, color="blue"            ),            linestyle_opts=opts.LineStyleOpts(curve=-0.1),   # curve为正时,曲线是凸的;为负时,曲线是凹的        )        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))        .set_global_opts(title_opts=opts.TitleOpts())  #设置标题    )    return cif __name__ == '__main__':    city_heat = geo_lines()    city_heat.render(path="test_lines.html")

2613200bab017096ec0bacdc9895595d.png

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第2张图片

\3. 局部热点图

2613200bab017096ec0bacdc9895595d.png

 def geo_guangdong(guangdong_city, value) -> Geo:    c = (        Geo()        .add_schema(maptype="广东") #也可以是其他省,那么对应的城市名也是需要修改的        .add(            "geo",            [list(z) for z in zip(guangdong_city, value)],            type_=ChartType.HEATMAP,        )        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))        .set_global_opts(            visualmap_opts=opts.VisualMapOpts(),            title_opts=opts.TitleOpts(),        )    )    return c

2613200bab017096ec0bacdc9895595d.png

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第3张图片

\4. 添加一个坐标点或者绘制某一个点(需要该点的经纬度)

查询经纬度位置 (谷歌浏览器打开,在该地址后面,加上你要查询的地址,例如:北京):http://api.map.baidu.com/geocoder?key=f247cdb592eb43ebac6ccd27f796e2d2&output=json&address=

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第4张图片

言归正传,进入代码:

2613200bab017096ec0bacdc9895595d.png

 def add_adress_one() -> Geo:    c = (        Geo()        .add_schema(maptype="china") # 加入自定义的点,格式为        .add_coordinate("测试点", 116.39770014211535, 39.90779994986951) #加入的地址名称,和经度、纬度        # 为自定义的点添加属性,名称要一致,例如均为 '测试点'        .add("", data_pair =[("测试点", 100)], symbol_size = 30, large_threshold = 1000, symbol="pin")        #        .add(                                   #可用于在同一个图上绘制多个图形#            "",#            data_pair =[("测试点", 100)],#            type_=ChartType.EFFECT_SCATTER,#            symbol_size=10, point_size = 3,#            color="yellow",#        )                        set_series_opts(label_opts=opts.LabelOpts(is_show=False))set_global_opts( visualmap_opts=opts.VisualMapOpts(max_ = 500),title_opts=opts.TitleOpts())        )    return cif __name__ == '__main__':    add_one = add_adress_one()    add_one.render(path="test_add_one.html")

2613200bab017096ec0bacdc9895595d.png

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第5张图片

\5. 一次性加入很多个坐标点,使用 json 格式,例如加入三个坐标点,测试点1,测试点2,测试点3

2613200bab017096ec0bacdc9895595d.png

 def add_adress_json() -> Geo:    # http://api.map.baidu.com/geocoder?key=f247cdb592eb43ebac6ccd27f796e2d2&output=json&address=    test_data_ = [("测试点1", 116.512885, 39.847469), ("测试点2", 125.155373, 42.933308), ("测试点3", 87.416029, 43.477086)]    count = [1000, 2000, 500]    address_ = []    json_data = {}    for ss in range(len(test_data_)):        json_data[test_data_[ss][0]] = [test_data_[ss][1], test_data_[ss][2]]        address_.append(test_data_[ss][0])        json_str = json.dumps(json_data, ensure_ascii=False, indent=4)    with open('test_data.json', 'w', encoding='utf-8') as json_file:        json_file.write(json_str)        c = (        Geo()        .add_schema(maptype="world")  # 可以换成 world,或 china        .add_coordinate_json(json_file='test_data.json') # 加入自定义的点        # 为自定义的点添加属性        .add("", data_pair =[list(z) for z in zip(address_, count)], symbol_size = 30, large_threshold = 2000, symbol="pin")        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))        .set_global_opts( visualmap_opts=opts.VisualMapOpts(max_ = 2000),title_opts=opts.TitleOpts())        )    return cif __name__ == '__main__':    add_json = add_adress_json()    add_json.render(path="test_json.html")

2613200bab017096ec0bacdc9895595d.png

这个是在国际地图上:

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第6张图片

这个是在中国地图上:

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第7张图片

\6. EFFECT_SCATTER:绘制动态热力图

2613200bab017096ec0bacdc9895595d.png

 def geo_heatmap_dynamic() -> Geo:    c = (        Geo()        .add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="#eeeeee", border_color="#111"),)        .add(            "",#            [list(z) for z in zip(province_name, province_count)],            [("广州", 100), ("乌鲁木齐", 66), ("济南", 500), ("武汉", 1000)],            type_=ChartType.EFFECT_SCATTER,            symbol_size = 15    #标记大小        )        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))        .set_global_opts(            visualmap_opts=opts.VisualMapOpts(is_piecewise=True, max_ = 1000),   # is_piecewise=True 表示切分legend范围            title_opts=opts.TitleOpts()        )    )    return c

2613200bab017096ec0bacdc9895595d.png

echarts json 地图_练习:Pyecharts绘制GEO地图, 完美!_第8张图片

上面的一些公共参数:

symbol_size = 15 :表示标记大小为15。

.set_series_opts(label_opts=opts.LabelOpts(is_show=False)):用于设置是否显示标签。

.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True, max_ = 1000), title_opts=opts.TitleOpts():is_piecewise=True表示切分legend,max_表示legend的最大值,title设置左上角标题。

type_=ChartType.HEATMAP 等用于设置地图类型。

参考:

https://pyecharts.org/#/zh-cn/geography_charts

https://github.com/pyecharts/pyecharts

https://blog.csdn.net/zerow__/article/details/88785759

你可能感兴趣的:(echarts,json,地图,echarts,json地图,echarts,加载,地图json,echarts,地图json,echarts,地图不显示name,echarts地图json)