|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。
1 {: s: m! \# v; f! q% aCartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 " H I7 h ?- X1 h+ @
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - ) R t( t. r- i5 c1 O4 m) |/ v# G
& t+ ^' C6 s; f- _
conda install Cartopy/ b/ Z8 \: G* L( t
6 Y+ ], N- V" ~2 z
' T8 T5 @( \+ _/ l+ a- R* F2 j3 @3 ^4 o
2. 使用matplotlib.pyplot(plt)绘图: 例1: - ; I8 N* {3 k( [
- 0 B" e7 `8 D! |/ Y" y$ V
- , B/ N* @3 S: O; _, p
+ a. h/ A! T' P& M- 0 `/ {) I+ F2 i" J- C
- * G; C6 Y. q3 {$ L( ?5 J. z
5 V: R: A. L, J- H
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
- p2 {( _. P( n$ X2 E
% m6 G1 Y8 J5 Z# F+ ~( B- ( n) w+ _8 k" x; F8 ], N! i
0 @( [, L" L4 L B3 L: h2 z7 m
0 F2 ?0 J7 k4 K
, V9 \8 I8 H7 h( i, `, g- I! V- 5 Q U5 E* N6 O! O: F
4 k/ K' L( Z" `% C7 i/ X* C2 Q
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()7 G5 y0 ~6 i0 p: D- v1 y* F6 j
图形保存方式: - $ E, c* k9 H* [6 j* {2 f: b
- % E. H& e/ F! P7 [. p$ J3 e
- $ x0 |0 A z# v2 ~; n# w
" _) N7 W8 X% X! s
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片/ Z9 V' Y& \2 w# Q
* i- D/ p1 F u绘制时间序列图 例:以三角函数为例绘图 - 7 I) C8 K! R- y, g* @: i: u6 p
- ) t$ X2 ^0 d% P0 m$ m. {
, S! `# \% s7 e2 B5 R. P3 F5 `# @- 6 z; ^9 }6 s1 t# }- k, w8 ?% Z
% H4 E% r7 {$ {8 L! [2 [9 u; v
. ~% z4 Z- h* w* W- ~
% w* F/ M$ x: { ^
! [' E. z; C( f3 A- E. c* W3 g s/ J# z
. V5 D& w$ K8 V8 f8 i0 c
6 n; b' S1 i0 c! w; G) s- f- 8 Z' w1 W, z. A% g7 z( S0 I6 l) n) p
% ~' l5 J; Z/ i3 m6 ^
, u0 d J/ N. D0 P" x) S% n/ |8 r/ i! m& ]
) C/ {* O1 p+ k$ n: c" ^9 x
: ^" W& M, ]5 B% f8 a; |+ k0 p x7 [. N
6 i9 p3 w' o8 y1 N: I" ?- 4 Q- c, N0 L f- S8 Q9 V* H
- ) X x; y% t9 {7 B( N5 h
% E- I- t/ t- v" A& ?7 O5 I5 B) r$ z9 e( Y$ l
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()4 z; J( u7 q% _
, d3 a5 s- U- V
8 k1 H, c4 j0 [/ i$ i以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
- 7 `& e2 H8 H( _ O
$ \+ u5 w& \# g0 s. X' n- ( I1 k6 ?! v, f) ?
- ) U5 z& {, d7 w, s( C& K8 z9 d& o
- ' l; [8 ~6 l& |7 v
- $ O& E9 z, [+ m6 b! V) z
" t$ S+ K. n$ f9 D! X
8 @) W8 N! g+ v2 v# _+ h
; k; c3 d& r* z0 T" p, |/ e* I- . ^0 }8 `: V$ ?
s- B8 s0 K' q+ }* B0 D- 9 c" P, Z) |, T
$ i1 L' G$ P$ H5 g! P+ v- E: K
2 |# h: f, [6 N$ S& B- - i- f0 j1 R' q9 C) N# [
- 2 y, P7 U7 w3 `1 E
4 u& [- T8 L3 e+ z# j: m& X' U- + l8 X3 ]* r0 t- z* f6 ~
- 6 h% v; C9 k( y; t/ _) r
3 _" f; B8 C+ O, w7 O8 G- 3 v; o* @, {; S9 M2 Y. _: U
- , b7 }6 z6 w) s9 r% _
- 1 X( g& h8 u. Q' _. f
" F7 i, N+ h8 w4 n7 v7 C( 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(). m! E. f7 S! K" E! {9 }
2 q" B4 T- e, N4 F
, N& h& p9 G% H, i使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |