|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 # t1 D& s& Z6 s9 F
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 6 f' i9 U# o' z. e! T1 U0 [
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - ) p( t# }8 m, |6 w& \" K6 P4 k- q
8 K: J4 K! O# K3 N8 u
conda install Cartopy; m, T, E1 M6 d7 M+ w
, \ u0 Q& ^. b2 g0 O0 H2 g1 {* n" L, t4 v2 O: L1 z
% P5 J! n. e6 H+ U( I3 t# l5 U& ]2. 使用matplotlib.pyplot(plt)绘图: 例1: - : `2 B, z" d. n* R/ r' d
$ `; E# { }% F+ o5 m
% Z4 I$ C7 o( Y6 q& M( B1 c ~, V) [1 b
~9 G# T, R. t5 r! V1 Z7 O( F
0 f `0 s6 z y5 m4 [- 6 e9 O* X8 u0 e2 d1 F
/ G a: a. F: ^" H4 N( D, W
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
@* g# f1 f# z. b% [# T& @
1 C/ b2 w3 H+ m' N* o2 ?6 f) u+ E- ; p7 @6 r+ \! P; d+ G
* V2 b: B( l7 p; I# r, p
! m$ x) W% {6 ?
. i$ K$ M- i4 q% {
5 ^, E, I$ {% \; ~0 I/ Q/ K7 o* w3 O! K7 X2 D/ w
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
: X& V i' V# w% R, G- f" M
图形保存方式: - D$ r7 x3 I, N4 N9 ~
- 0 P. M8 H6 [$ B2 m: Q) L( ?% l
- S7 G2 m/ Q* G3 a/ \
" Y2 Q6 o# J$ T8 Y1 m2 ~* I0 F
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片/ K# f: x( x2 }( g; n1 f4 |( j
$ ]4 d' } t2 X/ c4 K
绘制时间序列图 例:以三角函数为例绘图 - 2 ~' G' _1 E R
- & H* H. ]( y* p4 a6 W
- 7 q2 {- P( w6 z* v1 l3 H
- 1 R: R F+ B' k
# P! T3 R* Q: k5 S: v G
7 |. O! C9 O5 p. Y4 ]1 t1 q' ]
! c9 c4 ]) d$ W2 \$ n5 H( p( j
+ I, Q- m6 F( I) Y- " e4 Z" @/ j- o1 q" T u4 ~" `
- ' K5 t/ l, J2 }* y/ g1 q
- 4 ^8 t3 Z" i! L7 v. w8 t4 H
2 a1 P \6 ~/ x% I, c- . T0 I- e8 x! A, p. x
. M: H0 ]7 p5 d4 P* Z- 1 X- x( x, c8 \3 P; \
- K$ }9 w6 u) G0 a. w
- 4 Z5 T4 D7 l# Z: ^4 ^
" p, x4 W0 k8 {1 Z( Z- S
% H+ p6 r. D6 N+ v- 9 T2 c$ @9 l5 j# p: l
* a7 ~' f3 {2 J/ x% M1 m" z
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()& @) h4 d- ?7 M8 X; q1 k
7 H, H; K2 p$ c# H: \! ^
% C* H. p& w6 K: D! z% W4 ] q8 P以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- O; F! W9 L8 w7 c
- ) H: A2 }/ Q3 y
- " r2 |% s& ?% ^% q3 B8 F( _
- 9 z* h% k9 s. n/ C+ k& `5 L4 L
- " ^, p+ F' i; O1 N9 u) o9 ~+ F
" X9 @- x4 t. S% I
1 q `9 I$ Y% O# r, P- # z5 U6 f* [3 {: y' w# |) a
- 5 ~( o% ^) e$ C/ F/ d9 P6 E" c5 |+ F
7 Q0 z$ ]# j0 b& v0 H- & j( A* W: W2 j
6 B6 e, f: z8 U; s; x; ?
0 S# _4 B, i4 ^9 D4 z- / Y1 J! a W& l: S
- a, V+ m7 l/ P' v$ }0 D# B- R1 N5 `: N0 B4 A
- Z+ C2 W" ]+ T5 o' }: q8 r
+ N0 i, G4 p" [; l6 c& o5 C+ d3 X- 6 G3 Z5 g5 b x+ O2 B. ]- w
- ( K' i7 }" Y8 p( N1 v) R3 \
\7 s, C" ]" L& S/ V- ' O' {9 g" i2 X6 x: d* _( Z
/ o7 X) ~3 W! A# r) F4 g/ p& G5 ~# b8 c3 B8 q: q* N' M
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()0 ]) o; y7 e2 B0 K# @ ^
0 L! @! \' F4 J+ d% F
: o" d: s+ _" ^& Z- _. T& f' C: J使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |