|
Python的地图可视化库很多,Matplotlib库虽然作图很强大,但只能做静态地图。而我今天要讲的是交互式地图库,分别为pyecharts、folium,掌握这两个库,基本可以解决你的地图可视化需求。pyecharts首先,必须说说强大的pyecharts库,简单易用又酷炫,几乎可以制作任何图表。pyecharts有v0.5和v1两个版本,两者不兼容,最新的v1版本开始支持链式调用,采用options配置图表。pyecharts在制作地图方面,包含Map、Geo和Bmap三类,使用Map类支持世界、国家、省市和区县四级地图,使用前需独立安装。so,pip它们!1pipinstallpyecharts2pipinstallecharts-countries-pypkg3pipinstallecharts-china-provinces-pypkg4pipinstallecharts-china-cities-pypkg5pipinstallecharts-china-counties-pypkg12345pip完之后,查看下pyecharts版本。1importpyecharts2print(pyecharts.__version__)12毋庸置疑,肯定是最新版本啦,版本号为1.6.2。一Map在制作地图前,首先要有数据,我从Wind数据库导出了全国各省GDP总量数据,命名为GDP.xlsx,如下图所示。有了数据,咱们就可以用python开始操作了,先把需要的库import一下。1importpandasaspd#pandas是强大的数据处理库2frompyecharts.chartsimportMap3frompyechartsimportoptionsasopts123用pandas读取GDP.xlsx,提取2019年各省GDP数据为例,我们来制作地图。这里注意下zip()函数,它用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。1data=pd.read_excel('GDP.xlsx')2province=list(data["province"])3gdp=list(data["2019_gdp"])4list=[list(z)forzinzip(province,gdp)]1234我们来打印下list,长这样:其实就是列表里嵌套列表的数据结构,只有这种结构把数据添加到地图中去。我们用Map类中的常用方法add、set_global_opts和render来配置地图。c=(2Map(init_opts=opts.InitOpts(width="1000px",height="600px"))#初始化地图大小3.set_global_opts(4title_opts=opts.TitleOpts(title="2019年各省GDP分布图单位:亿元"),#配置5visualmap_opts=opts.VisualMapOpts(6type_="scatter"#散点类型7)8)9.add("GDP",list,maptype="china")#将list传入,地图类型为中国地图10.render("Map1.html")11)123456789101112运行以上代码,用浏览器打开生成的Map1.html,效果如下:有朋友可能会问了,地图倒是有了,可你这地图不好区分不同省的GDP大小呀。不慌,我们继续优化以上代码,给不同省依据GDP的大小配置不同的颜色,让你一目了然。c=(2Map(init_opts=opts.InitOpts(width="1000px",height="600px"))#可切换主题3.set_global_opts(4title_opts=opts.TitleOpts(title="2019年各省GDP分布图单位:亿元"),5visualmap_opts=opts.VisualMapOpts(6min_=1000,7max_=110000,8range_text=['GDP总量(亿)颜色区间:',''],#分区间9is_piecewise=True,#定义图例为分段型,默认为连续的图例10pos_top="middle",#分段位置11pos_left="left",12orient="vertical",13split_number=10#分成10个区间14)15)16.add("GDP",list,maptype="china")17.render("Map2.html")18)12345678910111213141516171819运行以上代码,用浏览器打开生成的Map2.html,效果如下:怎么样,这下效果是不是好多了,颜色越红代表GDP越高。你所在的省份2019年GDP处于哪个颜色段呢?当然,对于有些审美较高的朋友可能还是无法满足你的要求。既然如此,那我再优化下代码,给地图添加主题。添加主题很简单,只要import下ThemeType,然后将主题添加到Mpa()方法内。我以ThemeType.DARK为例看下效果。frompyecharts.globalsimportThemeType#引入主题Map(init_opts=opts.InitOpts(width="1000px",height="600px",theme=ThemeType.DARK))#添加主题ThemeType.DARK12运行一下看看效果:有没有B格上升n个level的感觉,如果你还不满意,ok,pyecharts内置了10余种主题任你切换。萝卜青菜各有所爱,自个调去吧~二GeoGeo与Map类似,可以通过设置maptype参数选择地图类型,所支持的方法也和Map类似,我这里就不赘述了,直接贴代码。#Geo地图-涟漪图2importpandasaspd3frompyechartsimportoptionsasopts4frompyecharts.chartsimportGeo5frompyecharts.globalsimportChartType67data=pd.read_excel('GDP.xlsx')8province=list(data["province"])9gdp=list(data["2019_gdp"])10list=[list(z)forzinzip(province,gdp)]11print(list)12c=(13Geo()14.add_schema(maptype="china")15.add(16"geo",17list,#传入数据18symbol_size=10,large_threshold=110000,#设置涟漪大小19type_=ChartType.EFFECT_SCATTER,#地图类型为涟漪图20)21.set_series_opts(label_opts=opts.LabelOpts(is_show=False))22.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=110000),title_opts=opts.TitleOpts(title="2019年各省GDP涟漪图"))23.render("Geomap1.html")24)12345678910111213141516171819202122232425运行一下,效果如下:三BmapBmap是百度地图的一个接口,你如果Map和Geo搞明白了,Bmap也是分分钟可以搞定的。不过,有一点要注意,你要先到百度地图开放平台注册,获取AK才可以调用哦。注册地址:https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5注册获得AK,就可以开心制作地图啦,以热力图为例,代码如下。#Bmap-散点图、热力图和涟漪图2importpandasaspd3frompyecharts.chartsimportBMap4frompyechartsimportoptionsasopts5frompyecharts.globalsimportChartType67data=pd.read_excel('GDP.xlsx')8province=list(data["province"])9gdp=list(data["2019_gdp"])10list=[list(z)forzinzip(province,gdp)]11print(list)12c=(13BMap(init_opts=opts.InitOpts(width="1000px",height="600px"))14.add_schema(baidu_ak="你的AK",center=[120.13066322374,30.240018034923])15.add(16"GDP",17list,18type_="heatmap",#scatter为散点图,heatmap为热力图,ChartType.EFFECT_SCATTER为涟漪图19label_opts=opts.LabelOpts(formatter="{b}")20)21.set_global_opts(22title_opts=opts.TitleOpts(title="2019年各省GDP热力图"),visualmap_opts=opts.VisualMapOpts(max_=110000)23)24.render("Bmap1.html")25)12345678910111213141516171819202122232425262728运行后,长这样:folium首先,我用python调取了高德地图API接口,获得了广州市近6000个景点的地理数据,保存为poi_scenic_spot.csv。以下为部分数据:然后安装folium库,设置刺激战场底图,当然你也可以换其他底图玩,代码中提供了mapbox底图、高德底图等,任你随意切换。#folium-热力图2importpandasaspd3importfolium4fromfoliumimportplugins56data=pd.read_csv('./poi_scenic_spot.csv',encoding='utf-8')78#heatmap1=folium.Map(location=[23.122373,113.268027],zoom_start=10,control_scale=True)#绘制地图,确定聚焦点,默认底图(加载慢)9heatmap1=folium.Map(location=[23.122373,113.268027],zoom_start=10,control_scale=True,tiles='stamenTerrain')#刺激战场底图10#heatmap1=folium.Map(location=[23.122373,113.268027],zoom_start=10,control_scale=True,tiles='MapboxBright')#mapbox底图11#heatmap1=folium.Map(location=[23.122373,113.268027],zoom_start=10,control_scale=True,tiles='stamentoner')#黑白底图1213#heatmap1=folium.Map(#高德底图14#location=[23.122373,113.268027],15#zoom_start=15,16#control_scale=True,17#tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',18#attr='(c)'19#)2021folium.Marker([23.122373,113.268027],popup='J哥',icon=folium.Icon(icon='cloud',color='green')).add_to(heatmap1)#创建中心标记22heatmap1.add_child(plugins.HeatMap([[row["lat"],row["lon"]]forname,rowindata.iterrows()]))#传入经纬度23heatmap1.save("folium_map1.html")#生成网页12345678910111213141516171819202122232425迫不及待运行了下,效果如下:热力图有点中看不中用啊,看这图我也很难搞清楚广州的景点分布情况。那咱换个别的图试试。1#folium-聚合散点地图2importpandasaspd3importfolium4fromfoliumimportplugins56data=pd.read\_csv('./poi\_scenic\_spot.csv',encoding='utf-8')78plotmap1=folium.Map(location=\[23.122373,113.268027\],zoom\_start=10,control\_scale=True,tiles='stamentoner')910folium.Marker(\[23.122373,113.268027\],popup='
我是J哥',icon=folium.Icon(icon='cloud',color='green')).add\_to(plotmap1)#创建中心标记11plotmap1.add\_child(plugins.MarkerCluster(\[\[row\["lat"\],row\["lon"\]\]forname,rowindata.iterrows()\]))12plotmap1.save('folium\_map2.html')1234567891011121314151617看效果!你就说酷不酷,炫不炫?结语以上归纳还算完整,当然,python的地图库还有很多,值得进一步挖掘。我以后还会写地图可视化的内容,欢迎继续关注,精彩不错过!对本文地图所用数据集和完整代码感兴趣的小伙伴后台回复“地图可视化”即可免费领取啦。关于Python学习指南学好Python不论是就业还是做副业赚钱都不错,但要学会Python还是要有一个学习规划。最后给大家分享一份全套的Python学习资料,给那些想学习Python的小伙伴们一点帮助!包括:Python激活码+安装包、Pythonweb开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!👉Python所有方向的学习路线👈Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)👉Python学习视频600合集👈观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。温馨提示:篇幅有限,已打包文件夹,获取方式在:文末👉Python70个实战练手案例&源码👈光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。👉Python大厂面试资料👈我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。👉Python副业兼职路线&方法👈学好Python不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。👉这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】点击免费领取《CSDN大礼包》:Python入门到进阶资料&实战源码&兼职接单方法安全链接免费领取
|
|