本文小编带大家学习如何用python画出完美的中国地图~昨天一早突然上微博热搜#维油部评论收问问题中国地图#滑动屏幕,我看到了我最近在追的《亲爱的,热爱的》。小编还沉浸在酣畅淋漓的甜蜜剧情中,还有今天的新热搜!!作为一个(jia)深(mao)剧迷,我高兴(ba)高兴(gua)浏览热搜,嗯???似乎不对劲……第39集的“问题图”引起了广泛的关注和讨论。剧中使用的地图有错误显示阿克赛钦与藏南的边界,台湾和海南岛的底色与大陆不一致,南海诸岛和南海虚线缺失,而克什米尔地区不符合有关国家的规定。规定等问题。不少网友表示,既然是公播剧,就应该好好审视一下。无论是制作者还是审评者,都应在国家主权问题上保持谨慎,坚持完整国家的原则。别大惊小怪!国家地图与国歌、国旗一样,是一个主权国家的重要标志。它反映了一个国家完整的政治主张,而不仅仅是一幅图画。一张错误的国图,不仅损害国家利益,更可怕的是,它还会向民众传播错误知识,削弱民众对国家诚信的认知。几经波折,小编决定亲自献上一张用python绘制的完美中国地图。这是绘制我国地图的另一种正确方法!!本次实验需要具备以下环境:python3.6及以上。首先安装pyecharts。默认安装是最新版本。最新版本的pyecharts需要python3.6以上版本。安装好python并在环境变量中加入pip后:windows系统打开cmd输入:pipinstallpyechartsmacOS系统打开terminal输入:pipinstallpyecharts。当出现Successfullyinstalled的时候,就说明pyecharts已经安装好了。下面我们把教程分为三个部分:使用pyecharts使用Python绘制中国地图标记剧中地图缺失的部分《亲爱的 热爱的》将地图另存为图片1.第一步第一步,我们可以试试用pyecharts画一张简单的中国地图:在任意新建的文件夹下新建一个map.py(注意路径不要有中文),写入如下代码:frompyecharts.chartsimportGeo#->Geoisa函数注解,表示该函数的返回值是一个Geo对象defgeo_effectscatter()->Geo:#下面是链式调用方法声明对象c=(Geo()#添加底层map.add_schema(maptype="china"))returnc#生成对象c=geo_effectscatter()#渲染地图c.render()运行windows系统:打开cmd,cd进入当前文件夹,输入以下命令pythonmap.pymacOS系统:打开终端,cd进入当前文件夹,运行完成后输入上面的命令,你会看到that在当前目录下生成了一个render.html,用浏览器打开这个文件,就可以看到我们的地图了。代码中有几点值得注意,第一个是:defgeo_effectscatter()->Geo:与普通的函数声明不同的是,后面跟着一个函数注解(->Geo),表示函数的返回值是一个地理对象。第二个是:c=(Geo().add_schema(maptype="china")#Addbottommap)这是Python的链式调用,其效果等同于c=Geo()c.add_schema(maptype="china")")生成的中国地图如下:2.第二步,在中国地图的《亲爱的 热爱的》中标记地图缺失的部分。新建文件map_mark.pyfrompyechartsimportoptionsasoptsfrompyecharts.chartsimport当前目录下的geofrompyecharts.globalsimportChartTypedefgeo_effectscatter()->Geo:#初始化地图参数page_title:页面标题,theme:画布主题(主题列表见Echarts官网)InitOpts=opts.InitOpts(page_title="中国地图",theme="light")c=(#声明对象的时候会初始化参数Geo(InitOpts)#添加在最下面map.add_schema(maptype="china")#Add区域点(阿克赛钦和藏南).add_coordinate(name='阿克赛钦',longitude=78.928266,latitude=35.115117).add_coordinate(name='藏南',longitude=93.128902,latitude=27.616436)#标记地图中缺失的地方.add("《亲爱的 热爱的》在剧中地图缺失的部分",[['海南',100],['台湾',100],['阿克赛钦',100],['藏南',100]],type_=ChartType.EFFECT_SCATTER,)#显示该点的标签(formatter={b}表示显示区域名称,详见:#https://pyecharts.org/#/zh-cn/series_options).set_series_opts(label_opts=opts.LabelOpts(is_show=True,formatter="{b}",font_size=14))#设置地图名称,即左上角.set_global_opts(title_opts=opts.TitleOpts(title="中国地图"))returnc#生成对象c=geo_effectscatter()#渲染地图c.render()运行同第一步,只是改了文件名,记得路径中不要包含中文运行后会在当前目录下生成render.html,用浏览器打开就可以看到地图了,效果如下:3.第三步将地图保存为图片在pyecharts中生成图片有两种方式,一种是selenium方式,一种是使用phantomjs,本教程推荐使用phantomjs,首先我们需要安装snapshot-phantomjs。和安装echarts一样,打开cmd(Windows)或者终端(macOS),输入如下命令:pipinstallsnapshot-phantomjs然后,我们需要去phantomjs官网下载phantomjs:2.1.1版本下载链接安装phantomjs以Windows为例说明:下载的压缩包解压后得到phantomjs-2.1.1-windows。里面bin文件夹下的phantomjs.exe就是我们需要的程序,我们需要把它添加到环境变量中。Windows10可以在左下角搜索环境变量。Windows7需要打开环境变量如下图(windows10也可以这样打开)到系统变量路径的后面,添加我们phantomjs.exe的路径,比如添加:C:UsersCkendDownloadsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsbin如果你使用的是windows7系统,记得使用;与之前的路径分开。;C:UsersCkendDownloadsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsbin接下来就可以生成图片了。在第一部分代码中,导入我们刚刚制作的两个包frompyecharts.renderimportmake_snapshotfromsnapshot_phantomjsimportsnapshot最后我们调用生成图片函数可以用来生成一张图片make_snapshot(snapshot,c.render(),"map.png")完整代码如下:frompyecharts.renderimportmake_snapshotfromsnapshot_phantomjsimportsnapshotfrompyechartsimportoptionsasoptsfrompyecharts.chartsimportGeofrompyecharts.globalsimportChartTypedefgeo_effectscatter()->Geo:#初始化地图参数page_title:页面标题,theme:画布主题(主题列表见Echarts官网)InitOpts=opts.InitOpts(page_title="中国地图",theme="light")c=(#声明对象时,参数Geo(InitOpts)会被初始化#添加底部map.add_schema(maptype="china")#添加区域点(阿克赛钦和藏南).add_coordinate(name='阿克赛钦',longitude=78.928266,latitude=35.115117).add_coordinate(name='藏南',longitude=93.128902,latitude=27.616436)#标记剧中地图缺失的部分.add("《亲爱的 热爱的》剧中地图缺失的部分",[['海南',100],['台湾',100],['AksaiChin',100],['SouthernTibet',100]],type_=ChartType.EFFECT_SCATTER,)#显示该点的标签(formatter={b}表示显示区域名称,详见:#https://pyecharts.org/#/zh-cn/series_options).set_series_opts(label_opts=opts.LabelOpts(is_show=True,formatter="{b}",font_size=14))#设置地图名称,其中是左上角.set_global_opts(title_opts=opts.TitleOpts(title="中国地图")))returnc#生成对象c=geo_effectscatter()#渲染图c.render()#生成图像make_snapshot(snapshot,c.render(),"map_marked.png")生成的中国地图为高清大图,最大7M!如果你愿意,你甚至可以改变地图的颜色,标点符号的颜色,每个区域的颜色,甚至细化到省市级别。详细请参考官方文档:pyecharts:https://pyecharts.org如果您要查看更多自定义方式,请阅读:echarts原函数:https://echarts.baidu.com我们的内容到此结束文章!如果喜欢我们的文章,请继续关注Python实战宝典!请记住我们的官网:https://pythondict.com,公众号:Python实战宝典
