|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 9 K4 j5 F0 a) f d2 `7 C
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
. \. u4 i7 Z- G, n& E5 w6 {+ J* s" s绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
Z; G# o( u% g( D; g5 s; t9 T. ^. D B
: x9 E/ y- w& J) o; R) Z
conda install Cartopy
6 _* ^. N, D6 c7 c R6 w' r8 g, C' D3 _ ( B+ f3 b$ H( A: l" r# b9 u
, G" t9 \. {5 q, ]) ]% d+ X
: s. R( _) E6 P# b2. 使用matplotlib.pyplot(plt)绘图: 例1: - 8 p& `- w% X9 ~- A
* I+ a4 L( L/ {+ ]
8 k2 E, L5 m' @
_+ K' j7 d* T/ i( Q- ) Z4 L; k9 Q l0 Y: @
- : m9 g# }9 q# L( V
( O/ {' d( | v8 G2 b
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
. X# z' R8 L! r$ k
- # F: M! s6 w4 P( j: N$ T; g
- 6 q/ O Y* n5 c0 C" M
+ \% A* M; A: q
3 H% M$ C9 u0 V0 r- 6 c. c3 Q$ I% i$ U
+ H& y: q e4 h
5 C5 R( B9 B0 h7 x# W
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
+ q" y3 X: G3 e+ `: [9 D
图形保存方式:
5 Y- b& Z0 }) ?* U H: ?1 O9 F- ; y) G* x$ w" |+ G# C6 f- L" k
/ M4 H/ e r9 z; j1 x# y) O9 V# ~$ o5 H$ b: G+ q
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
6 h1 Q: ^; _8 \ ; K' W3 m/ z) k) J
绘制时间序列图 例:以三角函数为例绘图
0 h4 H2 L6 b5 h# v2 F+ X4 i, Z
0 c' j/ v. g5 o% m1 F/ X1 r6 d- 2 K& L; G! i7 q
- 7 c* u' \& a" [) n
$ W0 V6 ]. n8 L& \- ! K; q5 I2 F" |8 T8 R
( F% e+ K$ a [) S0 \7 O! d( ^ h
2 b" E7 l5 L2 V7 h" w- % ]# T& I: H1 A* G2 L+ l
! d" o1 q, L7 _6 m; B f( U" [& N
8 F1 C. I/ [+ v) e( A, r, l E- " G9 [, C# A& _. p
0 o$ k V3 E' q. A0 g- , U1 S7 {/ ~1 ^# i2 c* T& q
- ' a0 Y' h5 }+ Q& h4 q9 J! V
- 5 ]8 i( p/ P6 t/ B) g, d
1 f1 _; [- l, }
# W6 y' T8 {( ^5 ?. ~! }
4 p: R% C' e" R, x# q/ H& `- ! ]3 f* s" s/ Z2 Y9 [6 C4 ^
8 }- D( N2 `; h4 K2 j5 Q
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()6 n" _3 @2 j7 \& o6 {
8 E, P5 A0 z! O7 @: t1 h
! }& G7 c8 `5 Y+ {以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
2 E! ?- o \6 E2 ~# M* ?' v1 W w
9 P4 B2 s- m! ? d6 I8 |6 U3 m- 0 {& [; ~. ~8 {$ y8 S
- * x3 Z( m$ C! K5 {% N% A% {% V2 c6 \1 d+ J
! Z8 ^+ X" Z g3 _0 V- I. \
' n0 \ N. z& P7 R( c9 \7 f: F
- o5 N; z2 B' _+ t7 _
4 t# _& V2 j; y- \
8 K, z: G: S+ C6 E8 l0 |- 2 v% W) _& C3 ~4 U6 }! B& x. v6 Y1 d
_& b! x8 i/ O3 b! i+ G
2 q8 u. U' ~6 ?, h; A
5 K, @ @% T$ }3 D3 J8 k5 ^2 i9 S O3 c- 4 X3 m0 t% X5 F0 U/ r
- " h9 t$ r- `8 _6 z
4 D. k' R' s2 R0 |# f; x1 ? G
5 I& r- x9 `; b6 y M+ q* F
# \+ i) W, z! ^- w* J! p' _
8 R5 [5 W( }1 R+ u- M- X! G4 A- ' u& B; A- e6 ]; k
- ! P6 z6 V3 x+ x% K* n, J/ Y* i. K
8 l- ~/ _+ F6 C- s9 S& z- ' E# P+ M3 z6 x" I. ~
0 d3 |2 |" V. j- C6 \" W
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()! m- L4 `! O7 T2 ?/ H8 r, q
# C) _: X! k* t* S- r( I
# @4 T; `4 B: ?6 B( h8 D2 h+ n4 j使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |