温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 . D8 i+ _! T% T
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 # N ^' y% W( ?; P. x7 J
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
9 M1 a% L2 L- V3 H6 q! b3 n6 f* Z, S! j2 t+ i( ]
conda install Cartopy0 ]: b: D# Q+ o5 w* Q3 f
" F0 X2 ^/ l1 o& G# F
9 |2 H; I, y7 k6 O% _7 x' w$ p# T; f4 Y& B( R8 Z
2. 使用matplotlib.pyplot(plt)绘图: 例1:
5 e0 o, F& v$ k6 V! I8 G- Y# V0 F- 6 I* v$ w$ K r, S# v
4 I4 r7 N9 A# h$ l) @- 2 Q, v( ]1 I% X6 {! ^2 X
# ~/ R/ Q2 ~/ ]0 N8 Z7 j2 g3 e9 p
) a# G: H" \$ H4 v4 _
1 Y" g; Z L3 M+ {* S x# ^
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
7 K/ j$ W( R# ^7 F1 o' ^
- a' ^+ D" x- J/ T. T$ y
6 s8 \- e4 D9 U R- e. B2 E6 o4 j- 0 P6 a( M' A7 V% E9 ^3 ?$ U
- 4 j8 w; G7 c0 W) I7 Y; m3 p
- 9 }% z d8 L1 d; B0 o2 R% k" N
- 5 @; U# K4 d1 B) M/ {; x
; O* H0 J, u& ~0 a" R
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()( w' d0 {3 b( a
图形保存方式:
' b+ f+ ?# \( J5 `+ D- ! K' ?% G# ~3 X% t
- ! [& u1 I( A. d; A( V
! X, w: |; P/ x9 ?4 f$ z
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
2 X$ W! C7 v w2 k
0 ` }- M8 `$ b: S, y绘制时间序列图 例:以三角函数为例绘图 - 5 A8 S+ W: \8 e7 V8 P9 E
- : N0 ?. }) D+ W7 N5 P
- - M: D/ K. Q+ Z4 `
- & B& @9 E* w8 U0 f6 n" c. \
- ; H2 j1 }9 |/ J6 j* {
- 0 i7 F& b, M& X+ Q( y
- & b' |& b8 C Q- y( f4 b' [
F+ ^3 p% J" n x
9 y4 f: t+ P5 R* G
4 b, U2 v# P: J7 U1 K
4 l7 A; R h3 @+ \1 l8 s. w d
/ a9 Z! }) {" u
! {. h; T* n7 w- 4 c i( E* }: ?8 @0 D( T6 h" |& _
" I1 h9 M( Y& ~& @: d! t' L- 6 M6 T E; m4 d0 Q9 [9 \
- + P0 P! B* r! X f8 S1 x
- " Z7 k) }9 F. P$ W% i$ d' U& P/ t
- ( [1 e( |$ `. Y5 u
' }, M2 @$ Q8 E5 M* p( E3 S X' j; S; K6 S
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()& Z, z" a3 P4 c
6 d- B- M4 h9 t, T y' g6 Y: ` : C* n, P3 B& j- t# }
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- ; x% q! S4 y* `# f
- ' T4 z+ v6 L9 l6 v! I
- 8 x0 `4 a( p2 ?& A0 [# [0 ?; d" c
- / n% Z) z6 m' v# T( x* M8 V
- 5 R. s0 r' R, V. ~
5 L. M5 Q7 ?" c: J1 y- ' k# {/ e& c. K6 }5 I( C
~' Q [/ m/ B) O3 Q F6 F8 |- ! h/ b% ^/ E. x7 Q/ U3 I" F2 N" ^
3 C3 A6 {& R- j% h# F
" j. P3 v" f" M# B( B# Q- % O$ o: G$ {8 k2 G! `# P/ d
- . `. J& L# ]/ V& u
0 Y8 m5 C% z4 M9 ` i
/ J! E3 Z( B1 b4 p
) R( p& r% B8 ~* V Y( U+ e- * g' Z9 ]1 N0 e5 |5 G
- 7 t+ k" H0 f) C# U- I
- 1 f; P$ ?( c2 ~
- 5 ^' U1 B7 Y% Y9 h T4 P: n; N. G
- 4 e$ a) U- R2 T f/ |" I1 y E5 T
7 N7 n7 j- y4 r4 D, T) c( n- o" U( D- 0 u$ |- m1 T/ w
) W- I0 z% o7 P; P. r, x
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()
, z9 l/ L. n, ^( l& o
) C# T+ t3 t4 _0 _) \6 ~ ]/ V5 N; q- \3 H: L
使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |