|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。
( E# U1 q/ h7 E2 W1 N8 S0 ]Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
- T2 N( Y; u+ d" s& g7 [! E0 Q绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - ; X$ ]. Z+ t* X$ f! n! o
! e; T0 J, I* h% a* k' @7 s
conda install Cartopy: [- o& I- i, P4 Q3 x, g
5 B ^/ y- K: s8 h2 ]6 K& H
7 l M1 Z; ~+ i9 S& m4 y$ I4 M: j: S3 X- y
2. 使用matplotlib.pyplot(plt)绘图: 例1: - 5 M) ~8 h* ]+ @# Y/ o
2 @. w: J$ M5 W, S, Z* O& K- 9 M: h6 W, K) @; @! }
6 o% G6 G. v, L- y9 m- x- : i" x3 Q9 y/ D# G- f: W3 }
$ w, j3 q$ D% @- n3 L' t: l, U
3 L& H( k3 i/ Y0 w# s
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()# L1 ~2 j# C; L2 z
- ; J9 b8 `" N0 c
( s ]6 [0 I8 Z7 l6 v9 l- 4 n' B* b) Y, ~; c2 t) O
- ! E, u) F/ n3 U2 x( P
% M0 i: z4 V* |% C3 r4 x- 2 G h) L( A2 K, ~
1 t3 M3 P( n+ v, g
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()2 C x8 h4 l% K
图形保存方式:
4 `: }0 m+ u$ N- c4 \ _* g- w
( J4 R9 ^9 B2 N
1 a5 H+ T7 ?: [7 O
( E" i% ]. { [& |
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片& V0 R& H) z4 ^0 {( S" D+ I8 S
8 g6 Q2 s. M3 w+ Y
绘制时间序列图 例:以三角函数为例绘图 - 0 H z$ l5 d! X$ e
- 8 S' M( W1 S' Y2 P/ P' |$ ^
- a3 `. {/ a9 l8 w) J/ F
" G+ U) w$ i/ g' s9 L: ]
' c! }" O4 w$ F& a/ N/ o- 7 @3 I; o3 w. V' x
s( L0 ~6 v1 O7 F% Z& r- 5 D' z% Z, S* X# s9 Q1 I1 j
- $ f7 t7 f# e+ ~- y/ O! d" d* r/ z
8 i# [& H6 C( ~% M; `- z3 x- W8 o! y
0 N8 u, Q% I8 a% d$ v, k' p8 l- Z
& b, n& ]8 F; W3 e
$ j+ o: F1 U0 [
7 b/ C# _8 p* ^1 `! K! f' v
' P5 A" M7 K# J, c$ A- i0 ~- s% {# K& i1 K% N
+ m( x; m% B1 f5 X' a( k0 s- : A! g& m' J0 F2 i
- ; U: C. k* H* `5 E2 ^' E' f, O% f
) _7 Q' o* X% r4 T; P/ m$ T
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()9 s# C" Y! A6 l& V, B- d
7 N/ s& V `/ z+ Q
% i) _6 c2 s1 ? V以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
; c0 {1 h( C3 n) e: ?
% g! I1 z; h8 c8 v2 Z7 t# o- E, d
1 b9 t, q4 J/ P+ W1 ~/ i/ y& X, Z5 K- & q ~' d( D/ E2 W) b6 P3 q
- , ^ _( L; }6 d) I* W" P1 c, a
' A/ A$ b9 A" I( k: s
( x" i7 t- d7 a. E! u( W& f
5 {- U" y5 Y6 W9 Z% h
* b t/ b3 Z" e
' R0 O& G9 O2 ]% q( ?9 w$ N- $ J( F$ G/ v4 x; G# u1 }7 r4 c
+ e2 S2 r8 g& B- , @7 O5 \0 q0 _' _' @* n0 ~3 T: j
- ( R+ d. `0 Q6 Q6 x+ \) J+ b+ U
- ! ~, v# U" j7 {$ v& j
- % N: l$ A4 ]3 A- V0 B
& K8 K" ]' K9 i
+ w* o$ S( b! [- ) ^+ p1 A% j0 z+ w1 N- s
- 2 G8 N& G1 L @
" b7 p9 T& t' l- & ?! l& a- L9 W- u# `1 P
- 7 j( K. G& C$ Y: l+ y2 z8 y
1 L# n& S: y) f/ @5 v) S
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 \6 o& g& F1 X1 k+ x
3 Y$ f+ S) Q4 D+ d+ k
, b* v7 X8 [, _1 r使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |