|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 7 s' s* ^% c2 v' v- l
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
* N1 m7 M9 R5 Y8 r# n! J% m+ h绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - / L. V% `7 J# n/ _: p
4 ~ y# ^' J) P8 b6 o; w8 R* j
conda install Cartopy
( d8 `9 z! z- A5 e2 u # ^3 r( s9 Q% `2 t
- u A8 `. j) I" ], q8 [5 l2 F6 P7 v0 {" @
2. 使用matplotlib.pyplot(plt)绘图: 例1:
2 q5 r' l: E/ N+ s9 H7 i# C% B
6 {# r* ~+ K0 r8 F! o- ( O9 b+ C! k2 ]6 H9 e* J. S% t
- 6 A9 n7 n: |; O
- 8 X! `' a4 R2 }8 o5 ^* |( S0 Y/ f
- + ?& M" L* N) ^( A
6 Q) ^ w! k, c
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()' n `, K6 x& D) Q5 y: T; S
- " N: {5 t6 ]% X# [
- - f# l4 Q2 {% o8 j2 C) n% u. C5 `, g
- 8 N- x" w4 B( e7 l0 H- D
- 8 r) }0 K, A4 X2 b- m
" U% s5 V( n N+ l
! K& k: }2 Q" O5 U/ q% D
& L* c. `* B( U$ H3 ~) a
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()% w2 ^+ N" v5 S
图形保存方式: - ( b; X3 D) }; H" |9 k- W
4 V: o3 x& g! K7 X* C
( c3 A' l I1 e3 S
- G" f. n P' e, V6 i
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片" |3 t9 i6 L2 r) y9 ^
, y8 Q: y; R0 ~& E+ B
绘制时间序列图 例:以三角函数为例绘图 - * @! `7 r) b& ?; H5 x
- ) y; `- W' s% X1 W. |9 u
6 B- F b) m- s7 M
1 h$ q) J/ `. J0 F$ f
0 @2 w& T/ i8 H% z# l- ^/ n- * W# B1 O; m* j' y9 b
; ~3 S, s& H' o: E5 [
$ H7 N" D$ f4 k' I% C- ?7 @! f- $ v6 O* V, \ M+ N$ M$ x/ v2 f; `! }
- + c1 s+ |2 e! I( q
' v3 C+ T. n9 s! X1 E- ; G* N$ T' q, C* ?+ y
O9 f+ x* i5 H- 4 t+ [0 F+ s1 k2 Q% C/ [: f6 K
- 0 F0 E2 \1 i+ f5 D- O( e# N
" W4 p0 Y( t/ q9 N) b
6 w) S! {8 C! p( O; u, z- 7 D$ O) a- |4 k, r5 o7 V, n
4 m+ a" ]0 Y# t- a- % x7 h0 U! [; B; U' O$ N8 v, f( }
* p% P. s3 @7 m" k W/ o
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()' W: ~2 N* J" H: Q$ g& r
7 k- p, T. [2 R3 K% r
! T9 m. w, M' m/ N- i, k1 L6 I以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
, H! L0 C# Q9 i9 l# F& o8 ?) Q
" ?4 u1 v7 X; Y, Q4 H! R5 k- - D$ x+ h: p/ u0 C4 n5 d- _
$ w' ~6 l& t# F
7 V5 q6 k: N' _. f8 ^; h
' `2 B# ^+ @/ i, z0 [- $ [& R4 a E& ?4 Y
- 4 n# x- \) y/ R
- * l! V1 }. y, r+ ^5 V( E q
- 3 O# g5 N6 k% v& |* Z- |
- 8 a4 ^8 ]! z0 L- ~! O$ Y7 d( u6 {' x
7 h" q# @1 U, B# O
K" T( P: Z. k1 {1 }
/ J6 b" n6 f% s2 P! \4 C- 7 {& o9 Q- m0 V5 r) j
* n4 @0 k' X8 Q
! G2 v; H0 g; }- % A7 V4 n1 K4 }6 V5 E
- 0 H6 P: i" ^9 F$ |, W% c
- 8 _( C- F% W- \$ F K
- 1 z( r2 C2 [4 x3 P
5 H; w* R5 m7 `1 m1 x1 ?
- k/ f# D% Z D! }: s7 S, _7 J
& n9 N' v, e9 n, V
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()
/ g+ z& V+ T4 K" z8 N3 W5 x
0 m& N! G- V. ?$ x5 O0 A$ q$ V: F
8 x9 z, A3 L1 f: m使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |