|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 . a. A. z: q1 ?) v' F/ }8 j# Y
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
* i# H+ ]/ x0 f绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
9 K6 e+ J, U6 y2 G) d6 H0 e. l0 W2 |$ I+ a
conda install Cartopy
8 ~4 H6 N: G* t6 N ( \8 }- C- j5 {8 b# C/ Z( S# X$ l' L
8 Z' J6 t0 B7 k+ E$ ^, C
& @# D4 s* V$ q2. 使用matplotlib.pyplot(plt)绘图: 例1: - * g3 q2 b9 m0 T
/ Q. Z$ u6 a" f, g$ ^) x6 I# i
6 y6 Q; e* Z: O: c3 z
2 A7 O: q6 i# X" Y: e' p- 2 ?7 M1 T6 ?( s4 i2 ^* S
+ x7 ?0 ~! W& N3 I6 D# O5 P/ v& U0 m# V; f
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show() I! l$ W! z2 H+ ~2 q. B# i
- 1 ~5 p) p; f7 W9 ]9 e; K* x
/ C. y1 N% d, H! T/ w, f- U
6 D m; ?& V) M2 y. [
0 z M# c5 q/ o- % L% d( _+ j* p j0 ?/ p
9 p5 A, R" Y' n# ~, v& t* O. a5 Q
- V' A7 ~6 ~. {: G( N
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
: U p9 q! ~: Z L( J
图形保存方式:
. U- L& d5 t1 x- % N# G- j8 }$ m9 \& M( X9 s6 F
* _! Z% t! ]$ j4 P6 Z4 S8 i8 Q& ^3 u5 O8 [- H6 R$ F+ q
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片, U# M P5 E: ]4 H% M0 \# q& u
% b& s& s, U. j; a# I
绘制时间序列图 例:以三角函数为例绘图
, F J5 U* a& F- W& X; f% i- * \+ s- u1 L# j; q% W* T4 q- W
8 C) @8 \: ~ f ?0 t
( T4 l2 x+ _& p1 u* e
# L2 z- E: c8 n5 y" q, n- : J. y& j5 B+ `1 ?3 g5 S6 I
- ! X" q- X" |/ W4 q* r
- $ G. v& X9 R' |/ `
$ J! e% u) \8 }& v5 h0 z4 R; L$ w) b- 8 O1 V5 ~, L3 D0 `7 \9 X8 y
' G* V) k: `' n9 x' \, n" l5 w1 k3 q- * T% V* {$ A4 U
- ) Q1 Z, d+ D) U( h, [4 k; [) }7 N
- % e; s3 m0 h$ a) n( {
- 8 l8 M3 `& h" l" s0 I: v! n
- : _. E8 \# ]5 w$ M: F m. K1 t
; Y& ~2 p4 E- D7 H1 a" [
4 W4 s* o0 v0 I+ ]: E9 V- ' d5 N- g9 N! ~( r8 B/ X& R
- 5 @5 d% O0 q! \# e4 H1 I
0 x/ a5 X2 `5 [4 k/ d# s( i+ V0 ^' ]
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()
0 @. i; b: S1 \; @2 ?
7 h" A/ L+ K( A) y5 m8 t# t
% o; a& ]6 H4 S+ x+ v2 K以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- . [% G) ~+ C1 s0 {/ o& E6 ]3 C
- ' ]+ Q% n/ x- V6 C% t- j
- $ ?+ @* t" ~; p+ S4 b6 K+ y
4 ^' }3 a; }+ F( C; l( Y- 9 c. Q7 \! l9 }, s' b0 d o
1 ^) G; r Y2 ]; T
8 w& D" w' O1 W9 f: b+ j- * q5 |# X5 X5 I; R7 A
- + |) s8 c6 A7 j+ w- `
- 0 F% |) c* I$ E2 Y. f
- 0 d% p# f! G3 Z8 c7 S, B5 x
, T! c6 ^& `; u) @
* u$ B2 Q) s2 T5 h0 e
3 S* V1 T% U) p w
1 y! w& Q: F$ e5 d8 q
! \9 ?( K! _2 o: e% Q; ]+ o- 3 c! a% F4 V6 Y( g8 D
- 2 x& i2 ^0 p. Z" A4 A- s
4 B& I0 }& [- }( [$ `- $ ?$ G$ Z4 B$ n/ o; J
# Y5 v8 W5 E% Y5 ^0 Q% l4 j- 4 D/ R+ m, v% l
- $ C0 N7 K6 u C8 x' ]2 R! e
# S: p0 ]9 ]* Q% b: \6 @
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()
% T: [: g5 N2 l
7 G e% |0 P8 L5 l' v4 L/ B
0 O0 L0 Z' J# S使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |