|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 & N' d3 C# L. d0 _' L) F6 i
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 x1 N7 Q* a7 t5 u1 \
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
' k9 l' F' s) z' w: H( }. W6 C8 H
# V: b) J2 l% \$ T: z
conda install Cartopy
& ~& k9 N7 e- u0 ~ - L) H; L4 v4 Y
+ L* b( e' O% I, t* a d9 w
7 @0 @, X" g/ a( `* N- a) ~2. 使用matplotlib.pyplot(plt)绘图: 例1:
8 G* u) W7 v7 H: q8 D8 t7 m
7 m( n. S: ?$ l9 f" L% [' W( J
; J# v0 t/ W8 }! [- : x' l4 o/ o) s% L
' T+ O w$ V, P
, X3 C( L1 x: ^; S( B- _; {, K
1 C6 q+ N1 ~) E: h( Y' _, c2 d" C
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()) K2 S/ L' \5 A: h$ A
- # `7 Q8 f, d9 m% b
2 {; P1 u( a) F G( V
$ l1 K" J9 K4 W) o- % a M( f( [( x) i7 V. S
* g+ k3 j* Y; ]: r5 Z2 R- 8 c/ n* D7 T" p; L5 n; \3 h1 q# a
0 |; S8 m# S! R. G" m) X& x) p
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
2 P* O, T* S0 X8 k% g' t0 s5 g. T
图形保存方式:
" `* |1 N! L9 j% r/ @5 h& H
6 ~# r2 W+ V6 i M7 z
2 y, Y4 }- Q3 o; N0 Q& {- r' P& h9 b' ], a/ Y
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
0 w# P9 A( ~) p8 q
4 Y$ O1 m4 { {$ C绘制时间序列图 例:以三角函数为例绘图
6 l, z7 n( T0 w3 c `: j' j3 u' z, `- % _4 P, |' J+ j
+ }; ~. }$ b) ?8 j o4 m- 6 `7 l" w u ~% H+ |
- 9 t; G! K8 M' m- _8 b C
. B1 i* X( V9 S8 Z; m$ \/ M% ^' r
0 l! A' ~) x& K% f- ) h+ d$ ]4 B* ?) I5 z/ M
( P x. N o( C6 N, i1 t
9 X) ~2 ? }! s2 q' U
) R6 t( j: j# l; O2 S8 Z: P: Y- $ B. ~7 m6 N4 f2 Q# u5 p# V
- # o/ l, O/ f: k% F3 P( v
- 7 U; _. I( E3 p/ J: M
- H% r) _' J; m
- ! I& k: K8 v, F4 k9 C
$ P5 ]' y- x3 h! e# J, q- 1 y% x! r5 M* a% ?3 M) D
- - l; L( a q. i2 ?4 Y' l& k
- s2 H; n" b7 @; n. x' }% {+ D# ]% N, Z* ]7 I/ r1 [/ J
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()
( S: {: R; s% Y( q* f; F1 B
. d; L7 ~$ ^+ z# q' j0 L N" i& {2 a7 h- F
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
& N t3 y( d. ?+ O- % O( z; \1 ~. c; j/ x) ^) r
- v+ V' d/ ^( o- z. T6 |1 ]& K- 0 g1 w V( L7 t) {+ A% T1 X/ V
- & `5 y+ x6 ] j$ e1 s% E4 V
- Q3 H; M( B8 L; ~( c# \
# T/ ~6 o ?4 u% Z5 C& p# H7 j' }- / S m% |1 J8 k# i9 ?9 w
$ A7 Y2 C R1 |/ x5 h% j
5 ]! A2 o! Q9 o/ L
8 O x' P, S. K. A$ Q- ! X' v% ~. w$ t* x! M
( W* S: Y3 k' u# l" ?( I
7 x2 b) k4 J; n
) ~/ S) ?4 _, i" R, C# G5 j# p8 F
" w& B* g8 x+ {( a- 6 ? k1 @& V d O9 A4 e# c. u& {
4 I+ a9 u( ], ?$ J( _. U8 e; {- 6 t5 y% b3 r. t( |* t- H
& ~$ a N( r: v. L2 i1 H- " v) w1 @) n: g: c
( Q, H( g _) Q) D# @- V( @- + e T3 F* B' ~* e. w, F# q
8 r* J8 z" _, p; ]
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()* O' j$ g7 D) }, k. X+ |
2 E; c( b, d3 @+ c, C! G2 @) U
- A7 H% y, P: I4 B0 a6 w3 o" \6 K( L1 N
登录/注册后可看大图 2 X& g3 j# X6 @8 E4 k
使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |