热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python画航线图_pyecharts绘制geo地图

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

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 importFakerfrom pyecharts importoptions as optsfrom pyecharts.charts importGeofrom pyecharts.globals importChartType, SymbolTypeimportpandas as pdimportjson#用于测试的例子,部分取自 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 inzip(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"), #左上角标题

)

)returncif __name__ == '__main__':

province_heat=geo_heatmap(provinces, value)

province_heat.render(path="test_heatmap.html") #保存为html文件(网页打开,是动图),也可以保存为 png 等格式,也就是 province_heat.render(path='test_heatmap.png')

214c49b894a662d59f9cc6c855e6d3cb.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")) #设置标题

)returncif __name__ == '__main__':

city_heat=geo_lines()

city_heat.render(path="test_lines.html")

7a46fed42cb17b93f45eddc082af7ec4.png

3. 局部热点图

def geo_guangdong(guangdong_city, value) ->Geo:

c=(

Geo()

.add_schema(maptype="广东") #也可以是其他省,那么对应的城市名也是需要修改的

.add("geo",

[list(z)for z inzip(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

66d4b0b75c140363460fd6ed42a4ab2f.png

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

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

142fe563209e1b70c155c808bcfcbb7d.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(title="加入一个名为测试点的坐标"))

)returncif __name__ == '__main__':

add_One=add_adress_one()

add_one.render(path="test_add_one.html")

ca79403369412eabe58a2dbe0c47d137.png

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 inrange(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加入多个坐标"))

)returncif __name__ == '__main__':

add_json=add_adress_json()

add_json.render(path="test_json.html")

这个是在国际地图上:

bbfaf932b0b739c544a03393b2900a3a.png

这个是在中国地图上:

cd2144571a2f6be8673250760230b349.png

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

e830c564f2bb004b4a5a54eff1bbb33a.png

上面的一些公共参数:

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 等用于设置地图类型。

参考:



推荐阅读
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
author-avatar
杰v杰123_246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有