|
温馨提示 (1)本号分享的有关python的经验方法都是基于anaconda下载的库包(conda install 库包名 或 cmd 命令 pip install 库报名),以及使用anaconda里的spyder(python3.8)编辑和运行代码。 (2)所有的代码都是经过了spyder(python3.8)正常运行得出结果的,可以放心使用,也欢迎交流和讨论。 (3)使用的软件以及不同版本,都有可能会导致代码运用出现问题(不代表分享的代码有问题或是错误的。),关于不同版本运行本号分享的代码出现问题,请自行网上搜索解决办法解决。 (4)如有转载或分享请注明出处,尊重本号版权和辛劳,谢谢!如有侵权敬请联系删除。
/ K. E. i' @9 C+ fCartopy是一个Python包,用于地理空间数据处理,以便生成地图和其他地理空间数据分析。Cartopy利用了强大的PROJ.4、NumPy和Shapely库,并在Matplotlib之上构建了一个编程接口,用于创建发布质量的地图。cartopy的主要特点是面向对象的投影定义,以及在投影之间转换点、线、向量、多边形和图像的能力。 7 v$ S5 _: ^. ]* X
绘制简单地图 Cartopy公开了一个接口,可以使用matplotlib轻松创建地图。创建基本地图非常简单,只需告诉Matplotlib使用特定的地图投影,然后在轴上添加一些海岸线: 1. 使用anaconda安装Cartopy库: - ) n9 o& y9 j* S0 p0 v1 L0 l
g! E' n7 j% F* |
conda install Cartopy/ f# C% ?3 F, O1 R2 Z- Y
$ ]" C' W. v! |1 S9 C/ [4 A4 l$ v' |2 x+ J e' _
1 C- `) Q2 C/ o0 X- P1 S2. 使用matplotlib.pyplot(plt)绘图: 例1:
, w& r; k" g% P, i! q- ' X. `- N3 K; M' S: L
' s2 l8 I! B W- " T: F0 Q1 c) ^5 @+ D5 B+ G$ j
- $ N" H) {* f/ A* \& @ E; ~
3 D( [# n6 E1 y
% M+ b5 r- V! G7 y- k) `$ ?
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#一种投影ax = plt.axes(projection=ccrs.PlateCarree())ax.coastlines()plt.show()$ e# N/ S0 N/ [8 a2 }% A& [
- . w1 ]# i6 X& y" [( ^3 Q% r
6 s' l. u( Y$ \) p- g- / w# ^3 `0 `* I" Z
- * A: s1 g5 U y, M7 N) z9 e$ [/ x+ j& h4 t
: m' ^% k, f7 ^. E: f+ X1 \" S2 @
" W+ F2 A( p1 o2 U/ Y1 U4 J4 R0 E
4 v' T5 d0 }' _; x+ s- s
import cartopy.crs as ccrsimport matplotlib.pyplot as plt#换一种投影ax = plt.axes(projection=ccrs.Mollweide())ax.stock_img()plt.show()
1 M- S+ L6 n y" ]4 S
图形保存方式: - * ]! ~# \$ B7 A+ j
- & j0 q6 _: H" C# r1 P W* P1 c3 x
- }, Q1 R* M$ ]! H0 j! e3 y/ i. A3 K' x. p7 |; A3 v# i
# Save the plot by calling plt.savefig() BEFORE plt.show()plt.savefig('coastlines.pdf') #保存为pdf格式的文件plt.savefig('coastlines.png') ##保存为png格式的图片
8 k! v9 W$ `+ N0 ~% ?0 I/ J7 r& K - S& O% F+ G: S2 X; I& F
绘制时间序列图 例:以三角函数为例绘图 - 5 ]# s2 w( i( v7 o
7 h# h# W1 q9 F+ J
! [) d9 r' S+ \) U- ]' w- $ z2 p J. z, r/ U
- 2 }6 ~+ U5 A! E( F' l# d
- - M, @9 O0 F2 A& @3 f$ L' i6 A/ c
V' s# C, C4 b3 b5 k
: K; L' l4 f3 `1 O5 G; k
- ^+ W6 t* T' ]" U; k
! _, v# A7 S2 D; n8 ?% l: C
, c6 j8 e( B" s% [
0 C; W7 l. y4 l1 Z
/ B7 ?" G9 L8 b+ |- 4 I8 \/ w9 u1 h
5 Q: {4 N# ]) Y2 _- , ?* ?2 Y5 d- e8 b) K$ }
- 2 ?1 d' O# b( w% e2 ^
- : S3 a1 g; a$ M2 H+ Y& T
- ; `& {5 v5 E/ i( o# `
- d; e2 O" J# m! i8 r; O) y3 n' x0 Z% V, U8 @. e: c
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()" g3 i% y7 V2 V: U: X d! \
. q! T( o8 x9 ~3 M6 ]
) i. a0 u& a/ e以某地1979-2019年平均气温为例绘制两个站点气温时间序列的子区域图: 数据内容如下:
( @% P& w. W4 j+ O- $ z+ x8 O* U# V
# P- Q. k) i8 l- * Z5 H/ y" D: v
- 1 l& j6 H n! t: x2 H& Q& ~
! ^6 X4 S& {. V6 x1 r" |) o( O `- * a, K! b3 r9 }. T- b
- 4 F" E3 @. o2 k" L$ g
1 o$ O# l0 a6 p# P1 k- 7 I, @5 ^0 ?- l: e
. Y8 h: u( l0 \: v: n3 i- R3 \3 B- . q$ y# M9 l3 d3 U, ~) g: [5 s% k: N. ^
5 Y/ O- I* @& w7 l2 k- 3 d; M+ m# y. }* w2 n+ {; t/ N9 u
- / q% g* w7 _/ ^6 V2 c% i
: h" i0 M J+ v4 v7 l5 n! t
7 X2 K8 [) e& A! s. N1 D4 V- / b/ W6 ?1 \( {! |2 v; n0 I6 v
- & i4 @1 |+ s$ W, v- p
- & | m$ y' b0 U ^6 |
- 4 @$ |5 z1 C2 x4 S
- ( N; ]. E' U- |% H0 Y$ X# x
- 8 X; X$ g: A1 ^; ?* t) d
# m: y: X/ t8 e" T! X5 v9 t
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: x5 }! s. i! a; H5 @# S' D
0 K0 ]* O9 J- `* E! x s" Z% a
. O, D5 y; [7 @+ P2 `9 s# C: @- i( b9 P
使用matplotlib.pyplot(plt)进行绘图时,直接使用plt里的函数:使用面向对象的方法,先产生一个Axes对象,再对此对象进行操作,实现绘图。 |