|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。 . p( M8 D% B$ K- E, V- ?/ X$ g8 [5 f$ J( M
Cartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 6 } E/ B9 f1 x8 Q8 C7 g
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - ; H* ]0 x D7 n% i7 \6 u2 J
+ F* }% f2 z5 c/ p7 S
conda install Cartopy1 B& ?# c' ]- j4 p8 x
/ W+ P6 K( a! W* U! {5 ?6 X1 r& K: j7 ^$ `. E* T5 f
4 [2 J9 J; w1 i- Q( Q$ I
2. 使用matplotlib.pyplot(plt)绘图: 例1:
$ s* ]- P+ h+ q8 C5 |- % f6 o* p* _, F" q: t4 m
! v. Q+ Z2 D9 V% p" M1 m
' B5 L9 m: G7 @- ?3 H9 O% G! }
$ N; P5 ~, F. t9 r. w- . P0 I0 h, j; T
& K" ]5 m I/ t+ a" y
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()( Z4 L. f" t5 h/ m; t% d
) N0 u$ c8 S% v4 m' V3 j# y) y
4 l! v) H q& M6 P) B' K
% ^" P" ?4 {5 p9 L- 6 x' }# n+ {% _ r, z
- + M' |6 ?7 a% r9 Q- U
- 8 u4 y5 |3 ~$ b( V8 {" n
) {4 p! ^7 t. z/ p7 H! u
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()% f, H3 |1 j1 |) V
图形保存方式:
* @3 ]! f: r9 y1 N: R- 9 M" K( O) d) U7 M4 }
- 6 Z( r% X! y& p. @+ R* q
, w: }4 E B3 g' P/ _" U# i# E" H0 X
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
' C* \( h( z* B C: D9 X9 v7 `. J
9 L0 |: k: d# w' z) H" o绘制时间序列图 例:以三角函数为例绘图 - 7 ?5 n2 |/ ]7 W; F* ?
/ P9 A9 r. w6 C: t- $ o0 {9 j5 _" s' ?1 _, D
8 u# d' {, V; Q- P$ e
: m' y& ?6 a) O3 Y; t/ ^2 t( }: F `
* ]$ `- x& _0 P# L! a7 Q% V3 \
% _8 F# e' u- C% Y8 c. H
" f3 Y: [$ `) k- ' n; [5 G0 m6 H0 j
b1 S- U, b0 a+ t- 8 E: d# ?: m/ j( D1 n# v% Z
. A" @$ ? T1 X2 g! z
' `) L* n0 Y# D( ?1 ~
4 B' n# {9 c( @
* Z8 J' j8 z. K% s' _- - v; T& v& K. g% [4 d7 N" Z
- ) o& Y2 v; G: q+ P/ w5 x0 P: Z* Z
- % m/ F3 Q3 U( p# x% u
/ i: l, P+ S/ E3 m R6 |
5 K# N& {2 \" R2 m( g' P- V; A6 ^/ I- C+ U
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()
- i# Y: {( w% E" B( a# O4 |
/ a9 Z! C# W D8 u. D
* I3 j. M; O* H( r
以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- 0 g) a9 S$ n, i% m% w# |
" k6 W; X. o9 `* i; c+ {9 @& q- ) h6 N% ~7 p! p0 L: m2 R) h8 E
& e+ b& J# f& L' h2 E- 8 D# t5 L3 Z' u5 A7 Q* j
- % J6 i/ r$ m* w2 r! ]; p
) {( W. d* E: @# P- + g1 w4 y7 o& E e* ^
- % L# t; z1 h; n
: e R# k( d4 ~6 `) o- M- , H, A$ L) K) R, S8 Y8 K
- : S9 h1 A) u# H) `) f% l0 ^
P/ {2 m7 Q8 N- ) y8 E: @6 U# e% D
4 p) A+ ]- \$ V4 S) ^& C1 c- : H5 F0 Y( w: Q+ Q# g$ f/ b8 E& ]
5 Z# ]' X! \3 S- & s+ M* L; o+ n t
8 t. r) S* S1 X% d) e% b- - p5 c% J; o" R& G G. z* @
7 ]- n+ y+ K& i! z: U$ `0 G- # y+ U1 y3 P2 J+ L7 R# P
/ M2 j6 S( o; M8 z8 r4 H
- c2 t; d2 c0 i0 w% L
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(), |/ p. T. ^0 _! c: Z3 v
. F6 u. I5 I* z* A* a
% D+ ]' P3 Q* J" Y# Y使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |