|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 * }& A/ i0 Q# Z# [1 A, Z! n' P, A5 Q
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 . k$ }8 V& N9 k; |* e& g z
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - 7 s% k8 K4 G: B3 Q1 k$ E& Z0 j0 I
7 r0 _4 i( G8 X( w
conda install Cartopy
* J5 p- f( {7 | c 9 ~$ L/ C( K2 w, I, R2 @$ S
* _+ O1 g0 M3 a& _* H9 c
+ t3 V2 {0 N5 a4 }' r2. 使用matplotlib.pyplot(plt)绘图: 例1: - ' s/ u2 j* U. |5 V( t: ?
- - m2 U9 r, |/ J9 Q, Q9 j
- $ n4 r" x7 }4 r; |
1 ?) N- b/ Q, `- P- " u) d+ L' r. Y, g& i( h9 W
- 8 I% i' L/ t5 J
% r$ L/ W5 i# Q# s2 U; t& b* a8 q. {
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()* x3 q2 W' b3 \! @, c; \7 B
) R5 k5 l( ~) ~; u; L
; S( c; c# p2 e# f9 `' d; ^6 b; }/ n- - c* m" g( s0 A$ I+ M
, t/ P) [( S, o5 @+ r3 p* O
) Q3 g; p0 z0 \- F- " e7 L+ c; P. t- ]$ k y' W: ^
% D1 f3 a' p: _: H
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
! n) u; L, E; G( @
图形保存方式:
3 H, o; t, P# P# I1 q
0 k% }6 J$ A F# Z) K* [- , g! J# c7 m* P& M. z
: `5 M& w$ I! u* H K+ Z! `# c* q
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片; ^; r/ V, j2 `7 [: c+ H3 Q! @# x
, D! Z7 N+ q5 Z3 [, _" i6 K
绘制时间序列图 例:以三角函数为例绘图 - $ l" x0 d: H$ k& b8 V. z+ N
5 Q5 F$ A( Y0 I2 m- y, F& c+ G- a% `2 `- R
/ S( W! l4 [: x& U% e, }1 h
9 r+ N% e2 e. k
+ a! {/ f- ?: C
" |; N+ G( P% P) L* k% B7 t
7 C5 ~+ E3 |- U" Y1 ^
9 ^5 [3 {: R; [5 Y- @! z. b- - @6 u( T0 \# f c2 b# R K. R8 C j
- - c* F. L9 Z/ t- ~) V. ?
- 3 g8 M7 \- H' Q Q+ e4 ^0 b
4 O. G/ i' P8 o6 @9 }/ J# ]' B- , |, d1 I' {% Q' X4 Q9 e4 d
- 6 ^+ {: ?, w9 h2 P# L( z
- 5 V! w8 e* B( V( m
- - ]8 {6 ^+ f/ A4 v# Y+ h# f
$ j; r+ n% O" Y- K3 H$ j4 }- 4 e( Z @. T: }& W* u
" N# a0 c( I* r; D% B2 f# b8 I
- _; _; R6 v" K! D! b
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题x = np.arange(-2*np.pi, 2*np.pi, 0.01) #设值y1 = np.sin(x)y2 = np.cos(x)plt.figure(figsize=(10, 7)) #画布大小plt.plot(x, y1, label='$sinx$') #绘制sin曲线plt.plot(x, y2, label='$cosx$') #绘制cos曲线plt.legend(loc='upper right') #图例plt.xlim(-2*np.pi-1, 2*np.pi+3)plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi], ['$-2\pi$', '$-\pi$', '$0$', '$\pi$', '$2\pi$'])plt.title('三角-函数')plt.xlabel('横坐标')plt.ylabel('纵坐标')plt.axhline(y=0, c='black')plt.show()5 O2 @4 k3 G6 d, I5 ]6 m* k
: j) X) }+ y( e2 l' ? * |! k1 u: q2 w- a) _$ T
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
x+ L/ J: N3 C; H
6 m8 b! |/ {4 _: p- f
" x5 n4 \6 Z- O3 m+ s/ M2 _0 i
- n S j7 q" A: M+ c- $ r+ r } C, Y/ i' \
5 K# ~+ Q" t; m5 H1 g- 5 {1 \; H( y9 k# ~8 [8 `% X7 ?
- . K6 U" G! t/ W m: L4 l# f. n
- 9 @0 V" T1 G& g! V, Y) ~
& i7 r# F4 K+ r! T- 9 y7 t7 n: W6 ^
% B# _# G- [! Y% l' u. F
5 r& P- N+ h. a: a) X; Y- 2 M+ |: S$ Z6 J- |
- 2 ]2 t3 W" f3 r* ?# o% E( j& ^
/ L9 R, @) P/ v3 X! b- 9 Z8 T8 x- r; u8 T
- 0 L& X4 n" b; z# H
: V6 V" O+ q8 p1 [3 ~8 }% h6 Q
( p, M4 I2 }+ q& E: `- 7 q3 Z5 d' q1 {2 R1 I3 l( W
- 3 P7 C8 f0 R. n+ y* l" A" H: w
, r2 q- ^4 Y5 D+ K9 d/ h3 h, }. i- Y% I% o0 n
import pandas as pdimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题#读取某地1979-2019年年平均气温数据共40年data = pd.read_csv("annual tem.txt", skiprows=1, sep='\s+', header=None, names=['year', 'sta1', 'sta2'])print(data)x = data.yeary1 = data.sta1y2 = data.sta2plt.figure(figsize=(10, 7)) #画布大小plt.plot(x, y1, 'r', label='$sta1$') #绘制sin曲线plt.plot(x, y2, 'b', label='$sta2$') #绘制cos曲线plt.legend(loc='upper left') #图例plt.title('1979-2019 annual mean temperature')plt.xlabel('year')plt.ylabel('tem')plt.show()+ S( q4 e8 k& X' f' h7 U- I
9 ^4 ~; M. r6 ~$ K7 y
- p$ s) n5 I/ ^使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |