|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 4 y7 n8 m5 d/ |- O
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。
5 c5 |' Z) I/ r+ i/ ?5 e/ n5 Y/ v绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - ; A: _$ S/ G6 K' B
4 \; g4 g. J" Q2 V `6 t
conda install Cartopy
$ S3 e3 I: i8 \ 4 W- e: b, R7 t, _
) @$ n, ?6 {3 _* }! c
' ^" x( b3 D9 |5 a1 S; v! {" \
2. 使用matplotlib.pyplot(plt)绘图: 例1:
' N( }/ T& {! m6 n- : Q# V: u7 i v0 f, B
. C: B# k' N" T4 ~( a
! F# R; h6 f" Z
. }) c- ^! Q2 \ v
, Y0 l( O& K- |1 b) l* s) s# [: D/ Z! y
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()6 H' j1 ]* P* Y: e
- ! O: Z& J+ l/ n$ @8 S
- 3 N B9 _% L; t$ ?3 \, h5 V2 W
; Y7 |$ r% C) y- ( m0 L8 E- [* g7 t% O6 Z
8 v5 N& |6 Q5 @: G- `- & W* b/ Z, H1 u6 d
# M0 O% s0 H% g& W* v4 Y0 b
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
( j2 W* y( l& I k/ d" ?$ Y6 Y
图形保存方式:
$ V; @1 N# C/ ?! t5 k- ^5 I
& Z4 W B' o8 E; x$ h# R- 5 I% `3 A b0 g: v1 h' P' e
. N) r# b/ W( J+ X- ~- g& @0 o5 h
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
$ c1 U( x2 f6 L& ~ ~2 c/ A( h# G/ p
绘制时间序列图 例:以三角函数为例绘图
* G2 D- r" O! _4 O, V+ @( a7 r
$ b- l! }8 s2 m' c5 c- ) F: @7 g4 F8 G2 N3 V. C8 z$ g" c9 \+ @
- % b3 k8 H% \+ j6 w# [1 o
2 `/ u8 ?2 z6 k- x" r8 W- 9 V& w* n4 v# {/ G0 ^
" @, k9 B5 B+ P. a% M9 [ @% r
; v! z: u) n0 q7 S2 g* O/ T: K S- : S, R/ s% C* Q, r
- 3 W# ]3 H8 J: C0 \
# T! B' G3 q( T0 I$ {- " W8 [: c. T# X
( \( W7 V7 E' U9 [7 _- 3 A5 m- h. D9 q9 X& S
- & x% B4 N5 h" Q) [
3 S( X$ ~& }9 X; h0 V- 0 G% v' I5 ^ {
2 _7 H2 P/ g+ o' O. T8 i- + n& }0 j. \, x2 \/ r# w4 R. |
+ g( u! `- I5 v' y" z
6 Y; |8 X' S8 \. }( a9 O2 h
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()
! M% f: J+ Y$ ]$ f. N: O0 N: I
{+ r b& w7 H' R. D; c( s) Z & L1 B4 N( B K0 C
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- . @$ I% ~1 T1 } t! x7 M& C
0 j2 ^: A4 x8 a& }" [# S+ Q
; A8 G; j3 O. c0 b3 t- 1 a# z y. |: [! `1 G
6 w0 s: _. I# S; }
, t0 {( e) W! c' x& p; l- * d% z" ]$ A) c9 T& q5 f& ?
- . w9 I4 v' ^7 T: Z) W% K
0 \/ Z) [ ~5 `, P" C
2 K9 T8 `0 M: ]" E$ e7 K9 }- 9 V2 H. w% G! X3 N9 H
( Q7 `0 p. y& c+ Z0 m: p" h
$ f+ W7 V+ F+ h- M+ W
8 |8 }* b* ]; [# E
! P* x' O" x/ T- \" u" y" Y0 Q; Y- * q$ S0 s }* r; s7 C1 x8 Z7 W' ~" H
- 8 r) m/ j1 u( Y
- % O( t- n) l7 Y6 w2 A
$ B" q' r2 }% s3 U9 n" }
8 P0 l2 F( C1 i* s7 U# t
! _& k$ Q& P: z7 C( ?/ X! G, ~" M7 N' S
\, t+ q( |0 i; I& K- F7 q% ~* x: j" b# m
; C' ~% k# X1 B
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()
) q4 t: t# X" ]
2 s( _/ O: n9 W3 `* i9 p
( |9 W' |( R* I9 ~! v
使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |