|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 $ o3 j. B- p8 u5 ~+ @
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 9 A$ _2 z# p A4 V
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
; f) N2 z9 ~9 y+ s) A7 @, N, B0 C" D- V% e! M; o; D4 u7 S
conda install Cartopy* |' @; b# G7 N, v H$ @
6 e/ B! \! x+ H: b* P
6 R5 y# w% k, `9 u* S
; X! |. _+ ? X2 L/ m3 c% Q
2. 使用matplotlib.pyplot(plt)绘图: 例1: - g+ |$ L2 x' Y0 U; H( u8 ^# H* y* R
0 {) i, c5 w8 X+ q* Q! o1 i- m
" c! L4 B# ~; X6 J0 ^3 j- & u2 G( i- }- t9 `9 o' Q- n6 s
- / R( M6 d% v2 @# X$ G0 X; `/ ?, g
- % W+ \% H; q5 `6 W2 ]1 ]
2 m# h6 z* W3 W: Z# ~4 f
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()0 `1 ^8 R; Z J. d) m4 f: l, I
+ |. C" z4 S3 X" a' U$ `
% G: b7 x, e" Q r8 e+ y& E
+ ?+ G% B$ K, ]( [( j- ~. [4 C; F, S, H1 w$ }
- 0 `, L4 X& A7 f) }+ @
- 8 ~) Q) Q3 V: E! P0 O* T7 M
) B' H: c2 @5 O/ i
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
, F7 N! k4 I2 e
图形保存方式:
5 F/ Z- w( t* e+ i5 U
+ H$ ~) @* Z* w& {
3 F2 v p# k! T3 m2 T; X* v) c& j
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
/ v# h8 x' j s6 {7 U4 X( U ; b% C5 [' o. }* s7 F
绘制时间序列图 例:以三角函数为例绘图 - ; d: B' ~( @$ [9 v$ z
- $ q8 o% W+ n' H6 J
) \' E6 X& [( b+ k. D) I8 G- ' R7 S3 S! o/ O- h8 R
- # F2 e2 A0 _7 o# _2 ]6 p4 v v
9 o" |7 ~& s3 _6 s- ) c% r: r2 ~5 W% o3 ~
- * R- n. y% u3 }) a" V- a0 n
) z1 G1 q' ]9 l' C4 `
- A; J n7 g- ~1 p
: @8 A' e8 `3 r- 5 i( g8 Y1 Y. m' F( s0 f- ]4 O& T6 F
" n( |! u3 E7 W& f; B7 p' v
' ^8 f [& \+ \
1 |+ }% p/ Y* L
5 z4 C' S$ h6 |
9 P6 U1 G1 J `. ^- i- 5 q: C% [7 B! g" q
- * A% x) h" q/ a0 K+ L8 G( {. Y
; m. n( X0 E# Z3 `; N
3 t: L! h; b. B+ x* H
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()
7 O, Z+ _: _, Z& y% g D
5 J4 @3 T5 ~9 y$ v4 N0 P9 c
: N4 l/ a: P5 o以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
& u h: n8 q) ^& a% m* k5 f
. \/ K" ]7 }# T. E9 a8 `- 3 I$ d" R A% [: h! w3 t$ B
$ B4 ^& N }# u
6 O8 Z" B: |3 A: y; d" r5 Z3 W- ) O/ D$ l# ]* i& ^3 Y1 M
/ W; q8 C2 ]) \: q" X7 a( F3 [- ) W: Y6 Z1 P I' e& Y
9 w3 a' s4 F+ F
+ h* H$ z6 J+ h4 Y
, o, F- i: K5 x/ j
, w+ u% d N1 t( n ~) T
( M @8 i; R9 \9 u, F, C' l/ P% J
& n* ^9 p2 `+ |- / X+ M2 A4 J! x1 n5 P. Z
- % ? ^: J" [* h, f& z2 W% w( J
8 r1 B+ K0 S: Q' G3 ~- 9 e0 b% }' {5 e6 }( |0 j+ Q$ `
- 6 v$ @7 P/ H9 ^! B$ K: \
7 a7 y( r& | g8 B7 l0 Q j
) R% {8 }( K' }! x& f: S
" q; ^. @; h& I4 C) T$ ~- ) O$ X7 D# L1 `1 B% R7 x
: P6 _5 A8 P1 S z# v* d3 P9 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()
# n# \+ V( \" S, ^0 _
" M4 ]3 P, H& Z' f! t : V4 A, N# i& f
使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |