|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 ; [: b5 W# M8 R
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 ) G7 p4 g5 {) o" H: F3 i
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
. ]* U' m- b5 F6 @5 k/ y& \# ^( ~, U
conda install Cartopy
8 d ~- Z$ U% U* [8 Q/ f % Z; ~# X. ~& A5 S6 t% K
' ^* z+ Y% a6 @. F7 V
8 I1 T2 Y, E8 P/ t" o3 Z2. 使用matplotlib.pyplot(plt)绘图: 例1:
# K5 w# n9 `) v+ Q- " j* E( z" Y+ j( t! U
/ |4 e! ?2 `# u. {! K$ O' s, `- " p5 A4 R7 d- g# Z
- : \9 c' ~! p0 G
- * O: G8 [2 h1 n) @6 U, G
( q9 @0 c# |: C, V2 |& r @* g
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
- |% O& f% n; Y3 y K
% V' \/ a9 c* M8 `- n! P5 f
! d$ A, M' T- @* |
8 R" `2 Q9 e) r& f0 B- ?9 w" ]
( A+ u4 L( C+ t7 R5 S) \" T
& R$ y, [2 D$ `4 {- ( L% W0 d7 l% [+ R9 F/ G' m
. e1 n: G+ j, l% V
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
4 y) O5 d4 [4 |) Q7 C( r
图形保存方式: - , [! D( c* L1 K2 U6 k
' V6 L( L) k) k) b7 A+ W7 l; T
0 ~2 L0 I& x" j& U+ ?9 l% r. u) O' z0 _4 [9 H
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片" d- f( {, o( i) b
9 b0 A# q5 |! n* T
绘制时间序列图 例:以三角函数为例绘图 - 8 S. h# l* C {+ l
- $ [& A- W, [1 O* A
" Z- V5 W, Q2 \( i
! }; S K" Z: T
# b( b' I, a5 Q) v1 X
1 d4 E; P+ w; v5 m- # o" X- r7 B4 `, M, O1 \# Q
8 @ |6 f3 C. z$ d% d) i- 3 W7 l& q; X: d, m7 ?5 M- m Q
1 |- N. \! r+ i8 w+ `! Q- ]; I
# y) }! M8 Y o
/ y" r2 ^% Q* Z6 y7 A4 w- 8 y% G$ i+ u8 ?2 S
5 E# W) q/ r' r& |% H
: D3 s7 y+ T; y- ) g. t6 w8 v$ A, p I+ t
- ) i) k% u/ G4 L% i4 \' y) g
l' T. ^. y! q3 C7 r* n" b- 4 T; Z. X( Y" x J' x
- 6 ?) i6 j! x# {$ n
8 x0 v! `6 b9 W
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()- h F; G( ]) J& t
_# T! ]9 R% O# I5 O" u/ Y3 V
6 B! [: G# G' f9 W2 V- M以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
: r; q8 M; k) w& }9 _0 _- 4 R3 z# O( }0 l+ k: W6 D
7 l) G, M# A }( U% J* }
' j, v4 ^# n4 r5 J2 K1 Q- 5 ?" n5 |3 ?1 y* T
% ?& D/ P# e! ]; X8 M
7 f( d7 D6 G+ g) ]: ]
5 \0 g! [! E" \- + K3 F. ^' t( t) }- U8 u
- 2 j( k( o: i7 v1 ]. L8 E2 K- x
$ ?7 Y1 Q+ K8 i) P# H9 d
4 P' O- \9 x: z3 p- 8 D$ x2 P2 A% K, J9 d
9 U- Y4 V/ h% \% c' t$ L) A- + c: h2 k% {6 \6 ?" F4 H
3 W3 X8 ?: p6 J6 ?2 J, `- ( R3 B5 m e5 Y6 t' E+ s" Z# Z
# Y8 Y; d9 I0 f( f$ m- & b" a$ Y6 v8 u. w5 K
4 M" G6 g3 k; n& s
5 R; w8 D1 ]) x; A$ Y- , ~ ~+ b# y7 ^4 S; G5 K4 [& ?
- 3 `. {* y6 v+ P9 O3 {8 |/ R
6 v! C+ j( T' E/ N% |) f
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()
2 o% A7 f! F6 l% z# w& `# j
, g6 u/ t; H4 D$ O3 I$ L
9 Z- y5 R( x" q( o% A使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |