小白学习cartopy画地图的第一天(中国行政区域图,含南海)

这是地图小白的我学习用cartopy画地图的第一天,慢慢摸索慢慢学习,一步一步学会使用cartopy。后面会持续更新。其中很多是从各个博主公众号中学习来的知识,难免雷同,在此先感谢(公众号:气象学家)

第一步是安装cartopy

这一步我不再说明了,作者也是尝试了很多方法,pip了半天,年轻人最后还是认怂了,建议大家安装方式为anaconda然后转化为国内镜像源安装,简直不要太简单,一条命令就够了,收起年轻人的那点小倔强,比如我。
这里强调一下地图包的问题,安装完cartopy后可以直接使用,但是自带地图包它会在使用的时候下载,这样很慢,所以作者建议提前找离线的下载好,放进正确的路径就好了,(离线地图包很多地方可以找到,要是没用,下方评论区留下你的百度网盘地址,作者发给你),地图存放位置为C:\Users\Administrator.local\share\cartopy\shapefiles\natural_earth\physical
作者也是找了很久才找到的。

第二步下载正确的中国行政区边界

老外坏得很,如果只用cartopy自带地图画国界,会发现很多边边角角是错的,所以需要下载咱们自己的行政区边界
网址是:*https://gmt-china.org/data/*下载里面的CN-border-La.dat,如果还有错误请及时告知作者,作者也是小白,立马删帖。文件也可以找作者要(下方评论区留下你的百度网盘地址,作者发给你

第三步可以开始画图了

导入库

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature

这一步就不讲了

读取CN-border-La.dat文件

with open('CN-border-La.dat') as src:context = src.read()blocks = [cnt for cnt in context.split('>') if len(cnt) > 0]borders = [np.fromstring(block, dtype=float, sep=' ') for block in blocks]

这一步是读取CN-border-La.da文件,目的是读取里面每个点的经纬度,用于给底图加上行政边界

设置画图参数

fig = plt.figure(figsize=[8, 8])
ax = plt.axes(projection=ccrs.LambertConformal(central_latitude=90,central_longitude=105))

这一步是设置画图参数,和matplotlib画图没区别,解释一下其中几个参数的含义,说白了就是利用兰伯特投影方式画地图
projection:投影
LambertConformal:兰伯特投影
central_latitude:中央纬度
central_longitude:中央经度

画海洋、陆地、河流、湖泊

ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
ax.add_feature(cfeature.RIVERS.with_scale('50m'))
ax.add_feature(cfeature.LAKES.with_scale('50m'))

这里利用的是cartopy自带的地图,分辨率50米,大概就是这个意思,我猜的,嘿嘿,不影响画图,当你看到离线地图包的时候就会发现还有10m,和110m的,共三种。

画国界

for line in borders:ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())

这里就用到了当时上面文件里面的坐标点了,其实就是用点画线,line[0::2]就是X,line[1::2]就是Y,就是用xy画平面图,这样解释是否理解,有兴趣的可以print()一下就明白了,一组是经度,一组是纬度

画经纬度

ax.gridlines(linestyle='--')

其实就是画网格线

设置区域

ax.set_extent([80, 130, 13, 55])

咱们画出来的是世界地图,这个来框处要显示的区域,经度80-130,纬度13-55,事实发现不是很匹配,不过大致也差不多,框出来的就是咱大中国,南海还不够,下面讲

画南海

sub_ax = fig.add_axes([0.741, 0.11, 0.14, 0.155],                      projection=ccrs.LambertConformal(central_latitude=90,central_longitude=115))
sub_ax.add_feature(cfeature.OCEAN.with_scale('50m'))
sub_ax.add_feature(cfeature.LAND.with_scale('50m'))
sub_ax.add_feature(cfeature.RIVERS.with_scale('50m'))
sub_ax.add_feature(cfeature.LAKES.with_scale('50m'))
for line in borders:sub_ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())
sub_ax.set_extent([105, 125, 0, 25])

画南海我就不赘述了,因为和上面方法一样,无非就是再加一个ax然后画

显示地图

plt.show()

这个不用解释了吧

完整代码

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature#读取CN-border-La.dat文件
with open('CN-border-La.dat') as src:context = src.read()blocks = [cnt for cnt in context.split('>') if len(cnt) > 0]borders = [np.fromstring(block, dtype=float, sep=' ') for block in blocks]
#设置画图各种参数
fig = plt.figure(figsize=[8, 8])
# 设置投影类型和经纬度
ax = plt.axes(projection=ccrs.LambertConformal(central_latitude=90,central_longitude=105))
# 画海,陆地,河流,湖泊
ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
ax.add_feature(cfeature.RIVERS.with_scale('50m'))
ax.add_feature(cfeature.LAKES.with_scale('50m'))
# 画国界
for line in borders:ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())
# 画经纬度网格
ax.gridlines(linestyle='--')
# 框出区域
ax.set_extent([80, 130, 13, 55])
# 画南海,这一步是新建一个ax,设置投影
sub_ax = fig.add_axes([0.741, 0.11, 0.14, 0.155],projection=ccrs.LambertConformal(central_latitude=90,central_longitude=115))
# 画海,陆地,河流,湖泊
sub_ax.add_feature(cfeature.OCEAN.with_scale('50m'))
sub_ax.add_feature(cfeature.LAND.with_scale('50m'))
sub_ax.add_feature(cfeature.RIVERS.with_scale('50m'))
sub_ax.add_feature(cfeature.LAKES.with_scale('50m'))
# 画边界
for line in borders:sub_ax.plot(line[0::2], line[1::2], '-', color='gray',transform=ccrs.Geodetic())
# 框区域
sub_ax.set_extent([105, 125, 0, 25])
# 显示
plt.show()

最后如果地图有错请各位仁兄一定要告诉我

小白学习cartopy画地图的第一天(中国行政区域图,含南海)相关推荐

  1. 小白学习cartopy画地图的第六天

    小白学习cartopy画地图的第六天 从开始学习画地图开始,就是打算用cartopy的,但是不知不觉跑偏了,跑去了Basemap,最近感觉这样不对,因为Basemap已经停止更新了,主要还是个人觉得c ...

  2. Cartopy画地图第七天(python画浮雕地图和比例尺)

    Cartopy画地图第七天(python画浮雕地图和比例尺) 本文利用了python.cartopy进行了浮雕地图的绘制,同时还画了比例尺. 先上图为敬,一些图例符号不对请不要介意,随便表示的 第一. ...

  3. Cartopy画地图第八天(冷空气南下,NCL色标使用)

    Cartopy画地图第八天(冷空气南下,NCL色标使用) 相信很多朋友都看过这张漂亮的图吧 这是中国气象爱好者公众号画的一张反映冷空气的图片,当时就被惊艳到了,本帖就来复刻一下这张图. 本次的知识点大 ...

  4. 用pyecharts画地图(世界地图、中国省级地图、市级地图、某省市级地图、某市县级地图)

    用pyecharts画地图(世界地图.中国省级地图.市级地图.某省市级地图.某市县级地图) 世界地图 中国省级地图 中国市级地图 某省市级地图 某市县级地图 世界地图 代码如下: from pyech ...

  5. R语言时代,你要怎样画地图?

    不知道各位平常有没有过需要画地图的需求,有的时候需要在地图上标出特定位置的数据表现或者一些数值,然而怎么实现? 这里主要介绍下在R语言中绘制地图的个人琢磨的思路.绘制地图步骤有三: 你得需要绘制地图: ...

  6. R时代,你要怎样画地图?

    转自  http://www.dataguru.cn/article-3062-1.html 不知道各位平常有没有过需要画地图的需求,有的时候需要在地图上标出特定位置的数据表现或者一些数值,然而怎么实 ...

  7. 小白学习Basemap气象画地图的第三天(中国温度分布图,mask外部)

    小白学习Basemap气象画地图的第三天(中国温度分布图,mask外部) 首先还是感谢公众号(气象学家),代码和测试数据来自与他,不过这次有长进了,自己学会修改了.还是逐条向大家解释. (和大家分享一 ...

  8. 小白学习Basemap气象画地图的第五天(读取micaps站点数据,省级能见度分布)

    小白学习Basemap气象画地图的第五天(读取micaps站点数据,省级能见度分布) 这一帖子,主要介绍了三个重点: 1.micaps站点数据的读取 2.站点数据的插值 3.不均匀色标的生成 在下面的 ...

  9. 小白学习Basemap气象画地图的第四天(省级温度分布)

    小白学习Basemap气象画地图的第四天(省级温度分布) 经过四个案例的学习,有了很大的进步,感谢(公众号:气象学家) 这次画一个省级温度分布,原理和程序与之前的全国一样,这里就不多说了,可以看注释, ...

最新文章

  1. PHP中把stdClass Object转array的几个方法
  2. C#里的登陆关闭问题。
  3. python中读取文件内容-深入学习python解析并读取PDF文件内容的方法
  4. Android app内语言环境切换
  5. 转载--How to Install VMware Tools on CentOS 6.3
  6. 第17课:基于 CRF 的中文句法依存分析模型实现
  7. Python(2):基本数据类型
  8. (项目)在线教育平台(六)
  9. Spring4配置文件模板
  10. Linux-定时任务(Crontab)基本用法
  11. rstudio创建矩阵_R中的矩阵
  12. find命令日常用法和文件名后缀
  13. 关于Lambda表达式的简单理解,以及基础使用,仅限新手
  14. 联想启天m420刷bios_联想启天m425装win7,联想启天m420改win7
  15. CMFCMenuBar 的另类动态修改
  16. Java:基础 :集合和迭代器
  17. 夜幕下的区块链:揭露区块链评级的猫腻
  18. 认识越南语的发音体系
  19. Broadcast广播消息
  20. 四川师范大学自然地理(2-地壳)90分以上版本

热门文章

  1. 通俗易懂说java设计模式-代理模式
  2. RDTSC指令介绍与使用
  3. 科学创新四十年,我们可能还没搞明白科学和技术的基本概念
  4. sql优化之in与exists
  5. 家常六菜一汤(蒜薹肉丝、凉拌黄瓜丝、红烧猪蹄、酸辣白菜、烤鸡翅、清蒸鲈鱼和鱼头豆腐汤)...
  6. unable to access ‘https://sys-gitlab.n.com.cn/IPSC/web/Bumblebee/platform.w/platform.git/‘: SSL cert
  7. [转载]校园背景音乐
  8. 索尼录音笔怎么导出录音内容_搜狗发布AI录音笔新品,引领录音笔行业“新声态”...
  9. Adas常用实验仪器和设备:RT3000/RTrange/IMU/INS/RTK等
  10. CSP-S 2022 复赛游记