|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 $ j+ ]. I2 X, j" V+ @ G' }% e8 s
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
8 A3 p+ |3 j' T* t9 N8 J绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
# k! b' `1 i& ~2 Y% o$ t
o: \3 G% X1 B
conda install Cartopy
; R4 `9 Z5 b! N$ c' ^ , R! C0 z: K6 ~1 q5 r- \+ W4 u
7 _& L% u) f; @ C3 z/ ?
P8 M- s9 J1 ?4 [4 s- e& L
2. 使用matplotlib.pyplot(plt)绘图: 例1: - 1 D$ z5 F( u) @) E8 A
- * {: \( O+ ]: W8 m) k+ d
- " ~ e: i: Q7 Y7 `/ Y9 ^2 |5 S
- 6 P% r# `/ @. V2 v
# G% X1 l, H* Y/ C8 K G- # Z2 q3 y- v& K- N* g8 w
. t! d W ~# N$ m
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()4 J2 P" z. k9 s
- - k% J( l/ E" N. G: B% J
- * }/ X9 ]0 p3 h! y- I4 G
1 e; T) u) {9 a' w" `, N
# }5 g8 g+ S$ {
, |! E0 \0 |% z2 Z4 \, H; D- - U+ i- ]' P5 I: T- ]
' c+ U/ e0 g4 M1 T5 `" J$ \; N
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()5 D3 ]) H7 x; R) Z0 [# a; i
图形保存方式:
* \) b. f" Y# y7 h$ m* p8 O4 j- 3 a) z4 I1 h& {# X
- " A+ r7 M9 B& I% c" T& S4 T5 @
, V2 e+ W/ R* S& ]. }' V& i" v
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片/ W+ h& G* N5 b3 }' K
# }0 s9 Y3 |" ]3 ^0 g
绘制时间序列图 例:以三角函数为例绘图
) V. t" X4 A2 X1 G- # q$ `2 U) X# _1 b" p6 ], j
- 9 Q( I+ O8 I- k% v, }3 J- G
/ w/ ^( w, d- q# |! t, \- 2 [. m# l" w/ B* b8 \# z8 o$ Z
- 8 y5 ~! S" O' s3 \0 i
$ U/ u) S! M7 A- S- 1 T+ x2 W# W& K+ N" v! n8 e6 b
- ) |8 S1 v0 N G# l( ?
- ' {2 R: E, R5 w3 P$ T7 L; j, I
- 3 b! S! g1 K7 Q9 k2 s3 j
- 9 Z' T2 w6 ~: Y) v
- 1 ]" K- V# F1 X9 E9 u0 W+ P
- ( s }+ D" t9 M0 o# Y/ d C1 z
2 T. V" M& u; v/ [7 x( T/ g- 0 Y# b7 Y9 x' s# [0 e5 b* p$ g
- 8 k4 w; c/ V- ` B0 a# `: X" ]
- * R+ n" _0 ]( [$ L6 a: a% u, j
3 b+ T+ G+ g- ]- & U' x% c. Y% Z; F3 k: a
% U! j5 L! s5 F& z# i
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 V, j. Y3 Q2 |0 v
% T2 x1 @- h" {4 U {8 w
8 o+ s M7 F/ w
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- 3 E6 o6 `+ H0 Q- Z; f
7 x8 R' A. o I" a( O
" K, Q# S' a6 d& K1 s2 S/ ?* o
8 h+ E \' u9 ~6 D
7 H3 f$ T- K7 S! n
* C2 r; _% `8 ^- 7 E" k( B6 f6 n* [
) `: S0 s* r( n) [9 ~7 j. A& _2 @
. ^; m1 S6 c7 w6 m6 O- 5 A2 N" V2 U2 X) }# I, W" |
9 s& Q9 Y) I/ v9 j( t9 R# M9 l) T" _
# C8 T+ M. P/ ]3 v
; }6 i$ M/ t; B, p7 B7 \- 3 i e2 b T, t- b* Y
- : g" i% k G' E7 d3 R/ W. K
- , q: ~8 T% F6 H# K
/ x8 V q! G, a+ w$ C! B# O' d- 6 `3 ?* L& x% d0 G$ J1 e$ Q6 ~
0 }. ~/ N4 S4 J( S, u- . I/ t! e6 P2 l' Q
- 2 @" y0 b9 a2 N: {6 k
- 0 D( |$ Q+ g. F2 W- c
- * U+ k; I' O' g) H2 M! z
& u# r( o/ T% |& I3 m7 W/ n
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()
c! z0 R; {. K2 x8 ~
2 [8 q8 u. i i* o; C
2 m/ `6 C" b: S1 b
使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |