|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。
5 i" y& e2 Q# z$ OCartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 4 ?% ~- ]6 s/ S' `. |9 W
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
( c7 r9 g* |7 w" e5 j( T
! K- C, v0 \4 v u* t5 _. V
conda install Cartopy
8 p3 R2 }" I( ^& p9 `
. d( |# T4 U% a' z4 T3 ~' {# }6 i5 l1 Y3 `& D u
* L4 a" n* E* c! w) z6 G p$ s0 ~2. 使用matplotlib.pyplot(plt)绘图: 例1: - 3 p u$ z$ a: u4 T
- 2 q5 L4 Y3 d# c2 o( j5 W9 O( o
( Y( m6 g) t' L
8 A$ U+ L' O& E0 Q
. W, _& c4 x. G$ p% N- - p5 X( C4 Z( y" K+ I
h( P; c# P9 B% ~' U0 ?" f
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()7 A; m8 ^1 ~8 d: ^
' V( g5 n1 t! `) e' n' ~- y9 |: Z/ k4 U
( @0 s% K; u) w3 n/ n, M7 w- ) \& S! X6 Y6 } k2 R! W+ t' F9 n
; f' s1 N; w9 y5 g/ T- 5 ?; W. \; Q4 v+ @
- h; x* W# ^9 D9 y; v5 B
H- b* N# e3 \
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
( z8 `( ~ v7 R: M
图形保存方式:
5 T/ v C7 Z( X- ' o% d' P. z/ l0 E: l
- ( p7 I) g# F3 y% k
X* \! b$ Y" e8 T) |
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片6 q! C! x& M3 E: ^' h2 l) D
6 G/ H' [: I( j8 ?3 Z* f
绘制时间序列图 例:以三角函数为例绘图
@% R+ ]$ j6 L1 S. X
- }- @$ ]3 d4 i J& q: q0 v- * i- M" g9 ^# W7 j
- ; o9 m! ^8 O9 g: K* F9 R
; y2 i1 K$ V+ D- & D; q" a) R% ?5 u. q' n
- 8 X3 k3 L2 g" u9 Y6 f
- * G2 h, A0 D2 t C/ U4 j6 M7 D
5 y- P! M- o7 B; T, `) X- : p0 s w8 {2 d: S/ e& r b- v% m8 T
5 e& o# ^: y- v! l. J F# D
% v3 L9 l Y6 T+ q4 H
8 D$ `* x4 R6 M- ' o5 d3 s) m5 @( z
- # B& x% @' n/ B
! f6 `) j/ U' ]8 D S8 n- j
3 |* e, D: _0 ], M& `' ~
$ {6 Z- Z" p8 J q3 t" j1 b- $ G4 Q4 D% l- p9 N0 e6 q* l
- - g2 k8 K( }% v+ a+ o3 G
( `8 z5 S: i3 f3 U
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()
; Q' c! v2 ], H; z* ?1 a& ]8 i
- x* D2 y$ f; q( y# e
" ~# r6 s. J x. E; k- y以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- $ \, `/ c- f$ T% B
- . r( F& F' T$ V. X9 a- L2 R
" G, O4 t* C& b( E- ! t6 |; h/ o0 l9 G* _3 K
- " m, c9 C9 d) T# ]! H, @( p2 W6 j
. p( w9 U5 x" i2 I5 G/ z# P* Z- ; g9 J; Y* A$ d* y
- 2 ~! _8 A1 _( Z' F
- . e* H/ ]4 h, y. N. l- b7 P
6 f8 O& I! j4 c6 Y: E" m( z3 F) ^- 7 s/ a1 @) N x7 B. y y
- ! H0 ~, R5 x0 f6 v+ v! x3 w) P
- 1 O, }( X4 A4 u3 B5 @- _
- , b3 x9 V6 _4 p5 X* d: i* o- Y
! u3 E1 Y7 u4 C) {2 E6 R N
( G2 O4 W: }6 h6 J; j+ E- 4 x3 g3 E6 l) Z! J6 f* o
- 9 U" w% d3 t# A) Z+ a5 t
; E9 x* s0 t8 [* g- b7 x- " ]! K, G6 h3 h& |2 E: ~( _
- ' p+ f/ K" {; z, S
. g/ O3 i6 z* [6 R' ~
% k: ?8 i1 o5 O& n# Z3 K3 u" w$ L% E! h- 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()9 R7 Z1 _, ^, ], T5 R
7 l+ @, |& h! V
) A1 h ~4 j$ _& F/ \8 F6 M使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |