本文章小编将带你学会使用python绘制一份完美的中国地图~

昨日,突地被一大早的微博热搜 #自然资源部核查处理问题中国地图# 刷屏,恍惚中看到了近日在追的《亲爱的,热爱的》。小编还沉浸在酣甜的剧情里,今的又有新热搜了!!

作为一家资(jia)深(mao)剧粉,带着欣(ba)喜(gua)的心情浏览的热搜,嗯???好像哪里不对……

第39集中存在的“问题地图”引发广泛关注与讨论。

该剧中使用的地图存在错误表示阿克赛钦和我国藏南地区国界线、我国台湾和海南岛底色与大陆不一致、漏绘我国南海诸岛和南海断续线、克什米尔地区不符合国家有关规定等问题。

不少网友表示,既然是公开播放的剧就该好好审核,制作方与审核方都应该在国家主权上谨慎且坚持一个完整国家的原则。

绝非小题大做!国家版图与国歌、国旗一样,是一个主权国家的重要标志,体现的事一个国家的完整政治主张,绝不仅是一张图画而已。错误的国家地图不仅损害了国家利益,更可怕的是它会向公众传播错误的知识,并弱化公众心中国家完整的这一认知。

经过一番倒腾,小编决定亲手为大家奉上一份使用python绘制的完美的中国地图。

下面是又一种我国地图绘制的正确方式!!


进行这个实验你需要有以下的环境:

  • python 3.6 以上

首先安装pyecharts, 默认安装是最新版本的,最新版本的pyecharts需要python3.6以上的版本,在安装好python并将pip加入到环境变量之后:

windows系统 打开cmd输入:

pip install pyecharts

macOS系统 打开terminal输入:

pip install pyecharts

出现 Successfully installed 后就表明 pyecharts 安装完毕。下面我们将教程分成三个部分:

    1. 利用pyecharts使用Python画中国地图
    1. 在中国地图上标记出 《亲爱的 热爱的》 剧中的地图所缺失的部分
    1. 将地图保存成图片
1. 首先是第一步,我们可以试着使用 pyecharts 来绘制一个简单的中国地图:

在任意新建的一个文件夹下(注意路径不要有中文),创建 map.py 将以下代码写入:

from pyecharts.charts import Geo# ->Geo 是函数注解,表示该函数返回值为Geo对象
def geo_effectscatter() -> Geo:# 以下为链式调用方法声明对象c = (Geo()# 添加底部地图.add_schema(maptype="china"))return c# 生成对象
c = geo_effectscatter()# 渲染地图
c.render()

运行

windows系统:打开cmd,cd 进入当前文件夹,输入下面的指令

python map.py

macOS系统:打开terminal,cd进入当前文件夹,输入上述指令

运行完毕后,你会看见当前目录下有一个render.html生成,使用浏览器打开这个文件便能看见我们的地图啦,代码中有几个值得注意的地方,第一个是:

def geo_effectscatter() -> Geo:

与普通的函数声明不同,其后面带了一个函数注解(->Geo)表明该函数的返回值是Geo对象。

第二个是:

c = (Geo().add_schema(maptype="china")# 添加底部地图)

这个是Python的链式调用,其效果等同于

c = Geo()
c.add_schema(maptype="china")

生成的中国地图如下:

2. 第二步, 在中国地图上标记出 《亲爱的 热爱的》 剧中的地图所缺失的部分

在当前目录下新建文件 map_mark.py

from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
def geo_effectscatter() -> Geo:# 初始化地图参数 page_title: 页面标题, theme: 画布主题(主题列表可见Echarts官网)InitOpts = opts.InitOpts(page_title="中国地图", theme="light")c = (# 声明对象时将初始化参数Geo(InitOpts)# 添加底部地图.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], ['阿克赛钦', 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="中国地图")))return c
# 生成对象
c = geo_effectscatter()# 渲染地图
c.render()

运行同第一步一样,改个文件名即可,记得不要在路径中包含中文。运行完毕后会在当前目录下生成render.html,使用浏览器打开即可看见地图。

效果如下:

3. 第三步,将地图保存成图片

pyecharts 中生成图片有两种方法,一种是selenium方法,还有一种是用phantomjs. 本教程推荐使用 phantomjs.

首先,我们需要安装 snapshot-phantomjs. 同安装echarts一样,打开cmd (Windows) 或者terminal (macOS) 输入以下指令:

pip install snapshot-phantomjs

然后,我们需要前往phantomjs官网下载phantomjs:2.1.1版本下载链接

phantomjs的安装在这里以Windows为例进行讲解:

解压下载的压缩包后,得到phantomjs-2.1.1-windows,里面bin文件夹里的phantomjs.exe就是我们需要的程序,我们需要将其加入到环境变量中。

windows 10在左下角搜索环境变量即可。

windows7则需要如下图所示打开环境变量(windows10 也可以这样打开)

向系统变量的path的后面,加入我们 phantomjs.exe 的路径,比如我的是加入:

C:UsersCkendDownloadsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsbin

如果你是windows 7系统,记得用;与前一条path隔开。

;C:UsersCkendDownloadsphantomjs-2.1.1-windowsphantomjs-2.1.1-windowsbin

接下来就可以生成图片了,在代码的首部引入我们刚刚的两个包

from pyecharts.render import make_snapshot
from snapshot_phantomjs import snapshot

最后我们调用生成图片的函数即可

# 生成图片
make_snapshot(snapshot, c.render(), "map.png")

完整代码如下:

from pyecharts.render import make_snapshot
from snapshot_phantomjs import snapshotfrom pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
def geo_effectscatter() -> Geo:# 初始化地图参数 page_title: 页面标题, theme: 画布主题(主题列表可见Echarts官网)InitOpts = opts.InitOpts(page_title="中国地图", theme="light")c = (# 声明对象时将初始化参数Geo(InitOpts)# 添加底部地图.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], ['阿克赛钦', 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="中国地图")))return c    # 生成对象
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实用宝典。的 Python实战教程

python绘制一份完美的中国地图相关推荐

  1. Python绘制各大城市职工工资分布地图

    本文是利用Python绘制全国各大城市在岗职工平均工资(2016年)的地图分布情况.思路是:首先利用百度地图API爬取各大城市的经纬度坐标(绘制地图需要),而后从中国国家统计局下载2016年全国各大城 ...

  2. Python练手项目:用中国地图验证四色地理

    根据百度百科的描述,四色问题认为"任何一张地图只用四种颜色就能使具有共同边界的国家着上不同的颜色.",不引起混淆的情况下一张地图只需四种颜色来标记就行.1976年6月,在美国伊利诺 ...

  3. 【Python基础】纯Python绘制满满艺术感的山脊地图

    本文示例代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 下面的这幅图可能很多读者朋友们都看到过,这 ...

  4. python label background设置成透明_纯Python绘制满满艺术感的山脊地图

    点击上方"蓝字"关注我们 Python大数据分析 记录   分享   成长 添加微信号"CNFeffery"加入技术交流群 ❝ 本文示例代码及附件已上传至我的G ...

  5. python 山脊图_纯Python绘制满满艺术感的山脊地图

    ❝ 本文示例代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes❞ 1 简介 下面的这幅图可能很多读者朋友们都看到 ...

  6. 不会CAD绘图?手把手教你快速绘制一份完美的CAD草图

    都说CAD绘图不好操作,也是.那么多复杂的图形,还有文字设置,加起来乍一看,确实麻烦,可是工作还是要继续,怎么找到快捷又方便的CAD绘图方法,进行简单绘图操作?那今天就手把手的教你如何运用xunjie ...

  7. 使用raphael.js绘制带全省标识的中国地图_1

    https://www.helloweba.net/javascript/242.html 此链接为最初的源码网站.经过修改的在我这里. raphael.js // ┌──────────────── ...

  8. 2020 11-12 用SPSS做中国地图

    数据地图SPSS篇 ▼▼▼ 最近在做数据地图专题,搜集了好多能够实现数据地图可视化的软件操作技巧,唯独漏掉了SPSS. 总觉得SPSS作为一个傻瓜式菜单操作的统计分析软件,应该干不了像数据地图这种高技 ...

  9. 可视化:中国地图R/ggplot2

    实际工作中,很多时候有画地图的需求,只要一出现就是全ppt最靓的图了.这里介绍一下如何在R中用ggplot2画出好看的中国地图,是很多年前写的代码了,运行了一下发现还没有过时.下一篇介绍在python ...

最新文章

  1. linux检查是否有D进程,Linux内核调试技术——进程D状态死锁检测
  2. Dart Metadata 使用
  3. 2020-07-09 CVPR2020 VL论文讨论(4) 笔记
  4. micropython oled中文_micropython esp8266+ssd1306(OLED) 显示中文(示例)
  5. geth JavaScript Console
  6. CentOS安装和配置Rsync进行文件同步
  7. 【kafka】kafka 报错 no brokers found when trying to rebalance
  8. 计算机的实现的理论基础
  9. fedora linux五笔输入法,Fedora 22上安装fcitx五笔输入法
  10. JAVA计算机毕业设计大学生旅游拼团网站Mybatis+源码+数据库+lw文档+系统+调试部署
  11. bzoj 1488: [HNOI2009]图的同构 (置换+dfs)
  12. python基本代码教学_如何真正零基础入门Python?(第一节)
  13. HTML 引用小图标
  14. python axes3d函数_python3D绘图Axes3D函数详解
  15. qcc302x qcc303x qcc512x TWS earbud通用操作说明 及体验软件
  16. 史上最全Java开发手册!!!阿里出版
  17. flash垃圾回收和内存泄露
  18. Disk Diet for mac (好用的磁盘清理软件)
  19. 云服务器文件同步,和云服务器同步文件
  20. 如何让Js代码只执行一次

热门文章

  1. 软件设计师中级 (复习阶段)
  2. 量子计算 12 量子计算机到底是啥?
  3. 别再纠结于那些自动化测试不得不面对的现实z
  4. 2013.6甲骨文公司的电话面试
  5. 创意下的个性化咖啡体验,Barsetto百胜图咖啡
  6. Android培训班
  7. 制造商将注意力转向轻质量以进一步提高LED市场份额
  8. 「雕爷学编程」Arduino动手做(34)——三色LED交通灯模块
  9. DZ插件制作简易入门教程(自学手记)第一篇
  10. kubernetes 曲线救国式下载 kubeadm 1.21 相关镜像