|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 $ M7 a5 E- D3 D4 ~3 D8 ~/ v
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
- {. z: i4 M; o3 q* }: T# A1 E绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - 9 ?0 k3 o0 W( e2 k
; v# j) |, X: D( f* |: s! U
conda install Cartopy& i/ l- \$ x$ w- G2 F5 F) x
6 H2 c2 ?7 _) s. F( e
. g% c2 K3 b8 [1 s- V2 k3 q
q3 y5 r3 e7 R& E9 o- h
2. 使用matplotlib.pyplot(plt)绘图: 例1: - " w5 q. p( K$ p* g* F0 \
0 K5 \: e' K4 w5 d- , @$ ^( g5 t8 L' S4 l
- $ m1 ?% W! v7 E% o- L% }7 \
0 z( j0 c( w5 I- * }1 a5 j6 A5 R9 \
# |6 T* Z( F* G7 O. r, u
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
# f6 ?# s. c, O9 ]: U
5 E1 Q3 f# r$ y$ ^- ) L; C- F& a5 d
- ) l8 | l6 i1 V
- ! w) C6 C! p7 j% I- S7 ]/ f
' l) \: B* k6 D6 i; i' n
3 O6 Z2 W6 C8 Y j( j
$ h% A* y) R& Y |/ ]0 w
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
2 y& e' M. k7 g/ i/ f" ~* r
图形保存方式:
' X7 d$ G+ m3 V* ^
/ g: X- b) F/ ]- w
% n' l4 `. B" @4 S
Q7 g& K# ]* `/ J* u3 o) P: G0 y
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片; n- F% c, D; H6 B3 A( i; i
2 o! P4 @( m7 g$ J. M: O
绘制时间序列图 例:以三角函数为例绘图 - ) \7 m1 M3 m" r6 m5 _% V! O
+ ~$ a: b+ L2 z3 t% Q& |- ' T( q: F8 H9 I% J" `7 k4 p$ A F" F
. Y5 Z1 ^; _+ @8 d" r- |- + X7 E7 V" X1 a: o, i+ e" V
- b6 k0 v& e7 V
) \7 w; D! v( _9 E% k! c
9 M8 ^) E+ D' J9 j) ~# R7 Q3 r- 8 a6 {8 y/ ~6 N: @# D$ {* b5 Z/ ~
- . D" W6 } ]* U
# L1 N# y( a: u4 b% a' k, S
, }# f. v' }' [
. ^& _: T4 E- |
9 p& m3 y" p, N7 x$ K1 O2 t- 8 H# _! E- h( o4 V! h
* z# c2 q8 E. }7 Z2 U) P- L! O1 o7 }* ^+ o" _, b
- @; M' S7 o- u8 m8 [- t- ) K5 Y( O. |, K$ {3 x# J& F
. b; v; O, u6 m7 f" w" ~6 r9 E8 ?1 ?9 M% P2 e
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()& H5 \/ T6 R5 E$ N( w
5 m0 a* V4 `2 r. J% h% v8 W! Q
# i$ R. F' x0 x8 b. S V
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
. n' e* F5 L3 ?/ \6 f- y9 q1 @; C; [
/ Q- M1 ]6 D# R& ]- # Y; k5 M5 x8 H+ X/ T4 S
$ v) }" ^7 M) I9 k7 i4 V- / |$ D. e) {; J8 V3 O9 m7 A& E y+ A
4 |' k* p& V4 M+ y- ! S2 _) I" L2 r) s
- . O! w- s( I+ @! X7 d2 @! Q
0 N b6 s+ k' s1 U# q: C- 2 H& F1 }, s( J
" a# ~/ g# B9 L2 V. a
' F: a/ n3 \( \
9 g! X3 z. j- v6 x. i" z# B
- N5 w# S. [0 C- 3 y& n- r* e/ |- b9 B& _5 y
- `& h# I9 N( Z# {* J' ]
- 2 H+ x7 Z- K1 }& R* Q& M
- ! L4 R' G5 M. D0 C
- ! ^" A# Y0 N# s, Q* k2 z
- j* p! _2 g% s4 t) N
- & S# v! L% B0 V) B. \, V M
- # a- w+ M6 g& T% k. g& p7 J: `
7 B: j( \) c, y- z$ P( n! q$ v! p8 A3 ~+ }7 x% w
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+ }3 L5 x% G0 R
, p+ b6 u7 S. ] |
3 T- \3 A! p* s; j3 b; o; d6 l" A. p8 w使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |