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-pypkg
pip install echarts-cities-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg

现在进入具体使用阶段:

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

1. 绘制热点图

# 热点图
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(title="Geo-HeatMap"), #左上角标题
)
)
return c
if __name__ == '__main__':
province_heat = geo_heatmap(provinces, value)
province_heat.render(path="test_heatmap.html") #保存为html文件(网页打开,是动图),也可以保存为 png 等格式,也就是 province_heat.render(path='test_heatmap.png')

2. 路线图

# 路线图
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(title="Geo-Lines")) #设置标题
)
return c
if __name__ == '__main__':
city_heat = geo_lines()
city_heat.render(path="test_lines.html")

3. 局部热点图

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(title="Geo-广东地图"),
)
)
return c

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

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

言归正传,进入代码:

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(title="加入一个名为测试点的坐标"))
)
return c
if __name__ == '__main__':
add_one = add_adress_one()
add_one.render(path="test_add_one.html")

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

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(title="json加入多个坐标"))
)
return c
if __name__ == '__main__':
add_json = add_adress_json()
add_json.render(path="test_json.html")

这个是在国际地图上:

这个是在中国地图上:

6. EFFECT_SCATTER:绘制动态热力图

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(title="")
)
)
return c

上面的一些公共参数:

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(title=""):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

pyecharts绘制geo地图的更多相关文章

  1. pyecharts绘制map地图

    pyecharts的安装和地图库的安装可以参照 geo绘图:https://www.cnblogs.com/qi-yuan-008/p/12025123.html 直接进入 python的具体使用阶段 ...

  2. pyecharts绘制地图

    python 绘制地图 环境准备 1.1 安装必备绘画库 亲身体验,最新版的pyecharts使用不来,通过百度寻得的教学推荐版本 0.1.9.4 可以绘制完成世界地图,国家地图以及市级地图,但是不能 ...

  3. pyecharts绘制地图可视化

    pyecharts:官方文档 我们这里使用pyecharts模块进行绘图. pyecharts 项目包含了一系列的地理地图数据,这些数据或者已经内置,或者需要额外安装和加载,我们需要下载下面六个包. ...

  4. 在echarts里在geojson绘制的地图上展示散点图(气泡)、线集。

    先来要实现的效果图: 下方图1是官网的案例:http://www.echartsjs.com/gallery/editor.html?c=scatter-map 下图2是展示气泡类型为pin的效果: ...

  5. 使用SVG绘制湖南地图

    项目中有需求使用SVG绘制湖南地图,现把自己制作过程写一下供大家参考. 1.首先准备一张湖南地图(仅有各市边界线即可).(图片最好是PNG的,除了地图其它什么也没有) 2.准备SVG编辑工具SVGDe ...

  6. 用matlab绘制中国地图

    reference:https://jingyan.baidu.com/article/870c6fc36fdacfb03ee4be58.html shp: http://muchong.com/ht ...

  7. 使用svgdeveloper 和 svg-edit 绘制svg地图

    目录: 1. 描述 2. 准备工作 3. 去除地图模板上的水印(可跳过) 4. 方法一.SVGDeveloper 5. 方法二.SVG-Edit 1. 描述编辑   有的时候我们需要自定义地图,本文提 ...

  8. R绘制中国地图,并展示流行病学数据

    流行病学的数据讲究“三间分布”,即人群分布.时间分布和空间分布.其中的“空间分布”最好是在地图上展示,才比较清楚.R软件集统计分析与高级绘图于大成,是最适合做这项工作了.关于地图的绘制过程,谢益辉.邱 ...

  9. GeoDa绘制疫情地图

    刚学习GeoDa,菜鸟,目前还不能在地图上显示省市名称,求教. 看到丁香医生发布的疫情地图,我也尝试做一下,不过我的shp文件上只有中国大陆的31个省市. 数据来源于丁香医生,截至时间为 2020.1 ...

随机推荐

  1. python - logging.basicConfig format参数无效

    有这么一段python代码 import threading import time import requests from decimal import Decimal, ROUND_DOWN i ...

  2. EF Core使用遇到的问题

    目录 EF Core速度问题 问题描述 EF使用方法1,每一行存储一次(400条/s) EF使用方法2,链接不释放 (40条/s) EF使用方法3,多次add,一次SaveChanges(400条/s ...

  3. 导出excel按照指定格式

    1.项目有个需求,要按照特定格式 导出Excel表格. 正常的都是一行 ,下面是数据.这次有个变动,就是每隔 几列要换行,下面是数据.在下面是数据部分.花了一上午写了下需求,不难但是花时间 //实现特 ...

  4. xmlrpc与jsonrpc

    RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立 ...

  5. Pycharm新建文件css文件无后缀,html中无法正确引入

    使用pycharm新建了一个文件mycss,然后选择文件类型是css,显示也正常,但是在页面中使用link引入始终无法生效.后来加了后缀名.css,发现可以正常显示样式了,所以新建文件时最好就加上后缀 ...

  6. springboot异步线程

    前言 最近项目中出现了一个问题,发现自己的定时器任务在线上没有执行,但是在线下测试时却能执行,最后谷歌到了这篇文章SpringBoot踩坑日记-定时任务不定时了?; 本篇文章主要以自己在项目中遇到的问 ...

  7. Python之路【第三十一篇】:django ajax

    Ajax 文件夹为Ajaxdemo 向服务器发送请求的途径: 1.浏览器地址栏,默认get请求: 2.form表单: get请求 post请求 3.a标签,超链接(get请求) 4.Ajax请求 特点 ...

  8. 第二周、ubuntu的简单介绍与使用

    一.复习第一周的大致内容:1.UNIX与Linux.ubuntu系统UNIX是1971年贝尔实验室的肯·汤普逊.丹尼斯·里奇,合作研发一款通过的操作系统,多用户.多任务.安全.稳定,收费.Linux是 ...

  9. go语言浅析二叉树

    Hello,各位小伙伴大家好,我是小栈君,今天给大家带来的分享是关于关于二叉树相关的知识点,并用go语言实现一个二叉树和对二叉树进行遍历. 我们主要针对二叉树的概念,go实战实现二叉树的前序遍历.中序 ...

  10. vscode 前端常用插件推荐

    1.  vscode 简介vscode是微软开发的的一款代码编辑器,就如官网上说的一样,vscode重新定义(redefined)了代码编辑器.当前市面上常用的轻型代码编辑器主要是:sublime,n ...