This article was last updated on <span id="expire-date"></span> days ago, the information described in the article may be outdated.
昨天本来打算用 matplotlib
和 Cartopy
画几张海温图的,结果意外发现我的 Arch Linux
更新软件包以后,估计是 libc
版本太新导致 matplotlib
break 了,只要一调用 plt.show
或者是 plt.savefig
必崩,给我人整傻了,又是更换内核又是搞虚拟机,今天下午临时装了一个 Ubuntu 22.04
用着,白白折腾了一天的时间 🤡。
更新:我发现不是 matplotlib
break 了,是 Cartopy
和新版的 Shapely
不兼容导致的。执行以下命令从源码重新安装 Shapely
即可恢复正常。
1 | pip install "shapely<2" --no-binary shapely --force-reinstall |
我之前就用过 Cartopy
,但是并不是特别熟。今天画海温图的时候顺便探索了一下,发现了几件有趣的事情,所以分享一下。
Pycharm 中使用 Cartopy 时没有属性和方法提示
这是困扰我许久的问题了,在使用 Cartopy
时,如果要绘制多个子图,通常会以一下方法绘图
1 | fig = plt.figure() |
但是奇怪的是,敲完 ax
以后竟然没有任务有关的方法提示,原因是 Pycharm
并不知道 ax
的类型是什么 (同理,对于 fig
类似。)。我们要做的,就是给变量添加上类型注解。
1 | from matplotlib.figure import Figure |
Cartopy 设置图片的显示范围
set_extent
函数一定要放到绘制完图片后的下一行,否则最后图片的显示范围会出现异常
Cartopy 的 minor 参数
在添加经纬度坐标的时候,通常要使用以下函数添加坐标
1 | ax.set_xticks(A, crs=projection) |
这里的 A
和 B
通常是一个列表、数组之类的,我一般都是直接根据经纬度范围直接用 np.arange
生成,例如
1 | # 经度范围:120 - 170 °E |
但是今天下午上课太困了,错写成了下面的代码
1 | # 经度范围:120 - 170 °E |
于是我神奇的发现,该代码不仅没有出错 ,绘制出的坐标也是正确的,而且还多出了小刻度
然后我去翻阅了 Cartopy
的手册中 set_ticks
的部分
按道理来讲,这里的 20 和 5 应该是赋给了形参 minor
,于是我把 20 和 5 换成了 minor=True
,发现得出了一个一模一样的图。没想到我犯个困还能无意中发现这么一个好用的参数,好耶!
Cartopy 绘图中心经度和数据经度问题
今天发现,使用兰伯特投影画地图时,需要注意一下中心经度设置和数据经度设置的问题。
- 当使用 0° 为中心经度时,数据的经度需要使用
0 - 360
的形式 - 当使用 180° 为中心经度时,数据的经度需要使用
-180 - 180
的形式
Author: Syize
Permalink: https://blog.syize.cn/2022/10/17/learn-cartopy/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Syizeのblog!
Comments