温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 ' }6 O2 W' P8 R1 I$ e
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
, M* G/ j: a" B: b/ `4 P绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
' n' }! q# k1 f( t, f3 V a
, t6 B- O3 ], F, k& d% l& ~
conda install Cartopy
1 N- ^" u) h8 ]/ U0 r) O ! D( P: v; U3 v, Z. N/ S& K
; M( n& P/ h! y
- R6 Z. K F1 z1 B0 {" w- }
2. 使用matplotlib.pyplot(plt)绘图: 例1: - 8 x+ l1 P) C1 G
! Z( Z& `3 T; X: x$ i
% G0 [. n6 P% q# `. D" A) x- * n6 E: k W3 \- K: Z
3 i- G7 ^3 ?* Q; c- 9 U* c5 h6 G" t6 H
0 d# \* c+ k& Q( C
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
- y* L- Q. { v0 o
1 p! {$ z0 T1 I& i7 E- 4 L9 L4 z/ M7 R# u' {; r6 B$ V. E
5 C5 u, a- |$ x) w2 w4 }
# \9 p" G9 A$ J' f- / Q2 z- ?3 O6 w' R) d2 `
- 4 u3 l( a# E8 y( f# T
+ `/ f; O3 Z3 M9 r, G o8 Q
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()2 E) B* m+ V* E# r8 O. v3 u9 L8 j; T6 n
图形保存方式:
& c3 v5 U7 v4 X6 R& d2 [/ J- 0 s7 W8 s' M: @1 o) }
$ y6 j0 M4 ?, z6 ~
3 e' L5 D7 o% m. S( }+ T4 E
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片% J, c; w. R* `0 A9 _3 v
* ]+ p9 q9 h- ^6 e
绘制时间序列图 例:以三角函数为例绘图
% x6 `$ W U( k9 v8 \" D7 d" B
3 A5 r& v7 N; a2 Q, p- " S/ L+ u! y9 Q1 v9 H. x" U
- ( j9 a! k7 G3 a9 s7 K
5 m; s6 g6 S: X4 Q7 T" e8 w0 x- - y7 y/ u& M# S" c. Y9 @( l
2 o1 ~) C: M4 O: `- 9 r+ y3 a; q# L9 ?* ^; s2 V
- 3 ]7 z4 ^* O3 _* x
- 9 r' }! U/ K" s4 v
- - t& e0 C2 z5 }5 }/ b! U B
- $ { [1 _! C4 s1 q! D' ~/ U
7 @# x* Y# W! ?8 @1 u% F m- + n* B# v1 q$ I0 }
( l2 s! m7 \! C7 S2 ?: U- 9 w6 M* P; g. p; K8 `
( u2 C3 P0 }! v- ?# w& O1 A' m
3 R2 o* z, u- y
4 A7 F7 Z+ u1 ~7 F' L/ g; [$ P' z$ L% C" k/ q& {+ L w8 |! s
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()1 K4 a, b/ z' D5 U7 z
; J3 Y7 J* H8 [) N) [8 f3 d
, _) e2 N6 G4 N- ^7 L9 h) b" J
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- , z" A* G& C2 C9 }8 z: J) Y
- * e# q& l" d) g' p9 D8 ]
- 9 N% c: F+ r7 ~7 b5 W
- 5 ]# A6 f- D/ a( H
- w' k7 }* A+ A0 ^# d/ x4 X- 7 ^7 z9 S+ J' ^0 d. z' K
! P2 b% a4 a" w
6 b" v3 K; Y/ c6 G1 T8 x" q
" ^% O1 I/ p3 c
4 @" K0 [1 s g* J% h- - L( V, O; p6 }: Q0 D
- ' H+ \* f v. b
! S" T# R+ [, }4 W. [6 V3 U; `- 0 ~/ i. E+ a7 S( d c& \
- 2 d0 F7 A. v5 a7 t; R$ p$ D$ p) _" d
6 i" D5 K4 b8 t! |- $ D9 R7 o! l' W9 E0 m, }
2 n1 B# n( J1 `, G K6 G
; f; z7 ]9 R/ k, v1 J- - u- S. _: p+ @. N' w
- ) N& P7 c- C" t, j+ l1 Z8 y
- 0 A) O' a7 b; ]" p1 W( F. F
- * z& z& m( x0 f0 w5 o
& @( S: I4 z; G E/ f
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()
) [% G( d1 a \" ]: y
+ {% H1 f# _' d3 ~' ?7 C1 S
: o+ o6 V" l1 x3 W6 O0 m6 C使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |