当前位置: 首页 > news >正文

程序员如何庆祝十一:用Python绘制红色的中国地图

文章目录

    • 安装Basemap
    • 中国地理地图
    • 红色的中国地图

安装Basemap

basemap相当于是matplotlib的扩展,而且作为一款地图绘制工具各种地理坐标的转换是其必不可少的功能,故而需要安装pyproj,在去年以前,Basemap还没有进入pip的时候,还得手动安装各种依赖,并且下载whl在本地安装,过程十分痛苦。

但今天发现可以用pipconda进行安装了,可谓喜大普奔。但需要注意,除了安装基础库之外,还需安装数据包。

conda install basemap
conda install conda install -c conda-forge basemap-data-hires

装完之后,进入python,先搞个地球再说

import matplotlib.pyplot as plt
import mpl_toolkits.basemap as bm   #以下都默认bm
from mpl_toolkits.basemap import Basemap
m = Basemap(projection='ortho',lat_0=30, lon_0=100)
m.bluemarble()
plt.show()

得到

在这里插入图片描述

其中,projection为投影方式,ortho表示正交投影;lat_0表示中心维度;lon_0表示中心经度。

bluemarble是一种绘图时的渲染方法,可以理解为极致色彩。

中国地理地图

中国最东端在黑龙江和乌苏里江的主航道中心线的相交处(135.05E),最西端在帕米尔高原附近(73.49E),最南端在立地暗沙(3.516N),最北端在漠河以北黑龙江主航道的中心线上(53.56N),有了这些经纬度信息,就可以绘制出中国地图了

cm = bm.Basemap(llcrnrlon=73,llcrnrlat=3,urcrnrlon=136,urcrnrlat=54)
cm.bluemarble()
plt.show()

就可以看到这个熟悉的轮廓

在这里插入图片描述

其输入参数表示起始经纬度,由于参数的名字太过吊诡,所以有必要说明一下记忆方法。ll即lower left;ur即upper right;crnr即corner。然后lon表示经度;lat表示维度。

综合来看,llcrnrlon为低经度;llcrnrlat为低纬度;urcrnrlon为高经度;urcrnrlat为高纬度。

红色的中国地图

若想绘制更加精细的中国地图,就需要用到额外的数据包了,戳这里:中国地图的shp包,含九段线。

下载后解压,然后就可以通过readshapefile调用了,其绘图代码如下

# 画中国地图
cm = bm.Basemap(llcrnrlon=73,llcrnrlat=3,urcrnrlon=136,urcrnrlat=54)
cm.readshapefile('cn/九段线', 'china', drawbounds=True)
cm.readshapefile('cn/省', 'china', drawbounds=True)
# 给 seg 地区 画 k 颜色
ax = plt.gca()
ax.axis('off')
for seg in cm.china:
    poly = plt.Polygon(seg, facecolor='r')
    ax.add_patch(poly)

plt.show()

效果如下

在这里插入图片描述
其中,readshapefile用于读取shp文件,drawbounds设为True,表示绘制边界plt.Polygon用于绘制图形。其绘图逻辑为,逐个添加各省份的形状,然后将这些形状染为红色。

相关文章:

  • 十一、动态规划题目相关
  • JAVA计算机毕业设计宠物销售管理系统Mybatis+系统+数据库+调试部署
  • 用qt编译qmake
  • 后端 学习 前端 Vue 框架基础知识
  • 机器学习论文-实验部分常用代码大总结
  • 数据结构:AVL树——C++实现(待补充)
  • Opencv之频率域滤波
  • 海思3559万能平台搭建:OSD功能的优化
  • 从1到100这100个自然数中任取10个数,使他们的倒数和等于1。这10个数分别是多少?
  • 【香橙派4B】6、测试串口
  • 【408】【数据结构】【图】
  • 【架构设计】如何实现3ms内从1000w级别的用户里面随机抽奖出100名用户
  • HTB-Chatterbox
  • 矩阵乘法的消去律
  • FL Studio最新20.9版本完整FL水果中文语言更新
  • JS 中的深拷贝与浅拷贝
  • 「译」Node.js Streams 基础
  • 【笔记】你不知道的JS读书笔记——Promise
  • Angularjs之国际化
  • classpath对获取配置文件的影响
  • const let
  • CSS 专业技巧
  • Druid 在有赞的实践
  • exif信息对照
  • github从入门到放弃(1)
  • Intervention/image 图片处理扩展包的安装和使用
  • Laravel核心解读--Facades
  • Linux中的硬链接与软链接
  • MySQL QA
  • PAT A1092
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Terraform入门 - 3. 变更基础设施
  • Vim Clutch | 面向脚踏板编程……
  • Webpack 4 学习01(基础配置)
  • Zsh 开发指南(第十四篇 文件读写)
  • 阿里云Kubernetes容器服务上体验Knative
  • 大型网站性能监测、分析与优化常见问题QA
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 目录与文件属性:编写ls
  • 浅谈web中前端模板引擎的使用
  • 三分钟教你同步 Visual Studio Code 设置
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 项目管理碎碎念系列之一:干系人管理
  • 回归生活:清理微信公众号
  • 数据库巡检项
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #每日一题合集#牛客JZ23-JZ33
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (libusb) usb口自动刷新
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__