|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。
. ?4 A: d$ N9 T& Z" H# n0 t# bCartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 * u( F! `, h& Y: `
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
! P2 k4 e7 a, H- F+ r6 K5 o
1 F0 H) o' V2 k
conda install Cartopy# b% l1 e! [$ I7 ?9 T
0 d4 E- f" H$ U/ D
, v, J% a& N: j8 V* e( f2 I: Q2 g! f) @* v0 m
2. 使用matplotlib.pyplot(plt)绘图: 例1:
8 Z& l; L7 A: z( q) A
* m7 D( e3 K6 E k; E
% i& `. w1 Q- `0 w0 z( V8 e
( ~4 h+ e) k9 W, \- A0 Z( Y; m
' Q6 [- q/ l! Y6 M! ]4 O- ! q7 \6 ^5 j" P
: v; |# ?# W9 L) i# d% h3 F
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
7 L2 m) h7 V7 K) w$ I x5 P8 i2 s
- 9 e! K" l& y4 M9 @) m
# F. f, s6 p% k; Y
1 u2 z6 Z3 j' G- l
5 N/ E! E3 P; d$ J
y; u k/ N0 z _# _# Q8 q' _' n- ( t7 f5 p5 M+ m5 f; O2 z5 A
) Y6 i7 [- C) q, I- w
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
- W) C `% K. \# e2 S% m3 q
图形保存方式: - & d2 f: P2 ]- N# L5 |
- $ I* Y% j2 y) t# p7 P2 l
- : Q( }! v1 c2 r, G# ~& N
2 }8 V+ L) J. H. }! h4 D1 F
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
4 \" H' |- ]8 Y: y
7 r4 T; r" X: u& d9 ~绘制时间序列图 例:以三角函数为例绘图 - 0 q- B2 S4 s. j8 {
; H6 [6 K P/ x- , V' h8 V a2 w* r4 F
) f$ d. R, o/ ^6 \
, h0 W# o# j7 m- 3 O& o4 N( S3 g6 L
- ) x8 ^$ \/ Y1 c
- * Y; Z7 {% f/ X2 V" P' ~ m6 A
* G4 _: {9 K7 n/ t9 M
# `8 C/ B1 k- b6 v) q* L3 M
2 v5 c! F' h. \6 A# [; w
: r7 F5 q3 V! ~5 X: y- ' f% x, u; g: I0 |- Y
- 9 w+ h- i2 _8 n g+ @! C2 H3 o
- L' `/ a# a1 i# J' R* N! Z: P- 5 X* e0 ^8 }/ M7 b. c
- " N1 |- R' t: z* K& ^) \& z
. E6 y y' ]- }% {- 8 V# y; G5 u4 |, I* M# [
; D# c6 S% x$ u @9 N
- a! L1 R$ z8 g* `: o
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(); {$ z6 z/ H. T8 m8 V2 r
P+ `. Y- K d: Y; `% F. e" B" O
8 U* o. v. p# j0 \3 r9 v6 D4 h# c
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
6 X. J I L) I/ S1 i' l- $ F9 P2 Q6 ]# v
+ n" a* A7 a: }$ s0 {: N
+ x$ {! _, V4 [8 D0 W0 F/ H- , a4 ~8 D7 | [3 n- C
- / s7 I l$ `, }, `* \! g5 W8 m& U
- ) e7 a: B% l n0 u3 U3 s
- 2 c- f7 p" D' Q+ k3 R x
- 2 F9 S# \* V$ r3 ^$ `
- ( J7 t j K0 o1 p# S- D! B# T
/ s: P1 J2 e1 r& ~
/ S |& o$ o) Y0 Q( N; j3 C- 2 \1 m$ Z5 C% m4 l. b
- $ L' d6 S; _9 D# K
. I/ Z9 X7 L# X4 K; G$ P9 R
2 r* G2 K$ @0 c3 V. {6 P
, D j1 d; l$ M- 5 ?& K6 _5 a3 ?0 _1 _ Y
/ E5 ~4 ~+ @+ r$ `3 ]* a9 D- / K; R9 {0 v' V
5 I. J% L) Q9 p& L+ k: T* M3 H6 A- ^
+ a* h' `+ h4 x4 P2 U# [7 A
4 B- R3 L4 E+ R4 f% I& v9 ]
/ H; t! ~& Q g- E
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()4 ]5 G$ b" o. b- j; R
) U: T3 h5 _/ a+ `9 w
" S6 r: x/ X$ ?0 J" }使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |