|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。
, m, o4 X! o' r) Y1 z2 c/ }8 LCartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 5 G6 C: V. Z4 L3 u0 O
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - - }5 `! A8 l+ L) L. z5 g& ^
% A9 p" f. R' h1 x1 M
conda install Cartopy! ^: V* N+ M; q8 K9 m
9 x+ k7 @0 `* [2 q; Z
4 {2 E9 k( a' k9 ?" M: z& g
8 \" {8 ?) s9 s: N0 P3 S7 F
2. 使用matplotlib.pyplot(plt)绘图: 例1:
" t/ e/ Q7 e: E
; n; H# d6 M+ O$ s9 x
( O2 E) Y3 ^ k% _2 d- 3 j( |* k; F, B7 a
* B8 Y8 {3 ?; e$ a2 o! C7 t
' o' `( }1 ~" R$ H8 P- H
- T1 _- z) T) t& V( l/ T
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
& j( x9 B& W: F$ _% f
- ( v+ m2 r! W( X" x2 w
9 ?4 K$ W" L) I5 |2 o
$ k% r/ @. u' G5 M- 3 J* p' V2 K; A+ i, [; A7 p8 j# {: P
+ }' N9 u& Q+ n- ) ]0 I7 t- O4 D1 M7 a7 I; i# C4 y
: j; O' _1 A7 ] g# u) `
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()8 v# ~: X5 W2 f. K t
图形保存方式: - $ @ T/ j* b2 e; E2 w# e
- 9 W3 p' r1 n U' f; A6 P: [; J
- " C( b8 J/ i2 Z
; ~; z2 E" ~& I/ C( d
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
2 h) q! j" n( T8 @$ X
9 r3 d5 ^, \3 u: @绘制时间序列图 例:以三角函数为例绘图 - ( |( v! h* D" m ?8 E/ r
- * C1 ], q3 n- c6 ` t5 b! V4 A
3 ]+ u5 j0 W9 |: V/ T: f; w5 U- $ \0 E4 A% h2 a3 t; l1 N( k
- # T4 i; X/ S6 @; n9 t* b6 ^$ }
- ' o9 r: d( g9 Y9 ?, ]0 H4 X
- & \9 { _5 L" J: y
- 7 l6 V. V. D; X
- # m9 T) ` s: g# M' P( X: j, P
- ( }; H+ @# P7 }5 |
- ) m* [" j6 F1 Z! [* j6 p
* I' |8 k. z- p! e$ h" I
, F* D. b/ R1 a( f6 [7 `7 Y; D
& ~$ U) ]& H: P# X+ W
2 S! O% z+ ^0 L1 V# f
; v! U/ c5 U' p( O. y
9 W: C6 w5 a" u( x$ q' [- * R2 p: g5 {/ I4 p8 x$ b# D2 k( `
2 w5 T% w1 b4 e+ }
% r7 I( [1 s6 |7 d+ [' [ o! r- j( h3 V
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()
/ c; R7 r1 x Y- i
1 ?4 [5 L" Q7 r/ s
0 c- M8 B3 q, E以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- p/ T) x& l0 _& t, f- 5 l+ R! Y8 D0 }& C9 d6 p, Z# q
6 C# z Y: S: ` y) r- t* p, ]- 6 e9 s+ s! F9 s$ i* S! v6 I: c# w
- + g$ Q7 S: y, C
. w0 | X+ g; }- Y. M- - |" X: f9 K' J8 C
0 e0 I: P$ t3 b" O5 c+ s) R# i- 9 O, D5 E; c" w+ B
- - e4 P+ L+ T: w2 R# i, m+ ?
/ Z/ y5 ]( m0 n" N) `3 q- 8 u* {6 N% f! J& H1 i, f! [* `
6 K4 R* R) g8 n7 g2 _4 D" `! t- 1 u9 d3 I$ e. v$ `7 Q- S
/ q4 N. ]& w% m
: v: ~" `! @" ?' l/ }% d- 0 y! e" O2 b' Z9 u1 p0 {. Q3 e
- 9 D% d" o* T" T7 {4 T) X
* k" o" ]% F$ T8 W8 L- ! T$ p* ~, |5 Q. {; l0 {
0 F8 ~) M$ Z- I6 x. @; ^5 c2 v- 7 D2 A1 Q% N, J- _0 m
- " D) ~& i" l0 S' l8 g
3 n! }- X1 r% `0 |- V6 r1 x% {. 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()
& `! |- I0 }, H" i0 ~! b
4 g: s5 C2 N; t& T7 O
1 j8 |# x% J& q% Y使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |