|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。
: `4 [7 m5 f f8 N4 HCartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 % D8 Y2 H! F5 p+ Y/ ?5 M
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库:
) a8 F6 `3 J+ W4 ~$ w- ]3 g3 U
. m: p6 k8 W1 {( P$ @9 G9 ?, X
conda install Cartopy
" l+ o% r8 A( E( _" H
$ `4 L6 V* z3 x' T& ~7 S; _8 W9 f0 G0 l
4 |) m7 V& ~) ]- v! f& v% `/ f, e2. 使用matplotlib.pyplot(plt)绘图: 例1:
- l+ o! U5 X! Z* |+ A/ }
) e6 t+ G) `1 i- C* |
3 Z @3 l* I" K
# @0 ~+ J# S$ H
# _1 ~. y9 Y7 b
8 q, ]2 z$ [, F6 E/ \# Y9 z2 j4 ~9 ~. }4 T' v+ c
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()
$ s6 r0 X- R* y( h% w
- \6 J/ ~" K' ~4 K" [: c! _3 R/ X
% ]' X2 e; T- f, Z- 7 _9 y F) b2 D
& O2 r& r ]3 u2 m6 C0 X. K3 t8 c- 2 Y J, C7 V3 E5 ]4 D$ f2 h5 v
. S. Q0 D2 f# v! l0 _3 h+ Z* b8 v( p5 y- K2 e
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
. s( o7 p2 ]$ M7 ^4 K) y1 H L: F9 T
图形保存方式:
+ t4 \; A/ d# K* o- 2 s. N* y1 y' ^5 s. H" r
- 0 c+ N+ m( E, d0 }5 s
; v5 D: c- Y, Q
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片( z8 n$ f$ X, `
; C: V6 z. U/ U7 m4 ]! m- U) q
绘制时间序列图 例:以三角函数为例绘图 - # O4 S l- o# R( p
- & O4 v9 h% P3 f% I; Y
- " t2 l/ `3 N9 o7 M0 _* o. B H3 m
- ; Y- I5 @% x7 v1 n: l1 N
% B& V. n8 K2 g5 h ]6 m+ ~5 {8 Z. s
7 q: T% v X9 J& s% O1 M- " P, V* y. f2 x2 v6 ]
- / d- W) ]! o, M- b W9 J
- 6 X7 @4 ^8 y0 g4 ~
- 1 ` ], n: {* U3 q5 i+ \* P6 H" a: i
, X$ X: ]5 `* H: b" Z# E
( n7 Q+ D% W" t( V9 I( ?0 y- 6 q6 a0 y" S) W/ q4 q! C
- $ a: R) q+ Y+ t, W
N* ^7 C g8 |3 G5 @- 8 a- G3 s- m& w9 o
1 c* o8 f/ J7 u+ B3 J
) S3 z' i4 K$ `+ S5 d5 n# f- 8 z2 l q" a( O- w
- 9 Q8 y' t7 J) l1 l
' L! [& \5 p* z
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()
- B% W6 l: |% ?9 D/ q9 v. @
8 u4 I! E3 O7 ]9 c& x
) L) }4 |, B! Z以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
5 g9 H6 f q& n |4 f- 1 Q' E$ G8 o9 t) C" @
$ a+ j. l8 ]9 k( u- 1 U$ ~/ f7 O7 V" ~3 B. P* o3 K
- 6 F7 _% V+ b0 N2 |
( i" d+ x, H4 \, N" K$ N
- m( g: L( v8 _; E5 [- & L2 f( a% S& H6 E4 j- ~& @
- 0 { K. h3 b" w6 o
4 H9 a' P/ V7 h& ^- ' |# l7 G1 f: z, V# Z0 ]- y
; Q4 u* X( _2 |( Q7 P7 }0 P: A' Z- , w, B! A- k* C2 Y! ]2 N1 E t
9 u% _. _! k: x: t% y8 z& X
! t: j$ k+ I: A6 x$ \0 ?) K* T
) Q7 n/ \; o$ P
- C H9 u! B' W3 k3 g' q! h; Z
- o: o6 r9 r! A) _% j" p" _: @
% l% @- } g* ~ w2 n- + W/ ?6 U* l+ P( @
, v& S; i' {8 d& K8 k2 ? f
2 W, Q. H3 q9 h
P+ o+ } H, J3 u* p! @. O5 i5 Q/ I. 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()' D2 ^( l' C8 ]2 l/ X- z( j
$ o2 ]& \$ c7 P b- I1 F0 U. T; _
' K% v9 N4 ^) H0 P E$ S* Q1 \使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |