3 L" ^6 k' j/ H& c+ N; c气象数据可视化主要依靠matplotlib做绘图,其他库包为辅助,包括数据处理的,地理信息处理的等等。 绘图主要有六步(“六部曲”)(不是绝对的方法,视具体情况使用): 引入库包:import matplotlib.pyplot as plt 设定画布:fig=plt.figure() 导入数据:之前已有介绍导入nc文件格式数据(【气候软件】Python读取气象数据 NetCDF文件(***.nc))和导入txt文本格式数据(【气候软件】Python2:读取TXT文本格式的数据)。 线图命令:plt.plot(x,y,lw=,ls=,c=,alpha=) 出图:plt.show() 存图:fig.savefig("···")
, X( e. o! z/ m" u3 |1 v$ I% [: n
只要按照以上六步,基本绘图没有问题!!!
7 [& l I& Z+ f0 [绘制中国区域地图 前面python9的文章(Python9:绘制中国/世界地图)关于中国区域地图的绘制方法除例3,主要使用的是pyecharts自带的地图,其中中国区域的地图有问题,所以不采用这种方法。下面根据其他博主大佬的文章(python绘图 | 中国地图最正确的使用方式(九段线&南海子图&高分辨率地形图一个都不少))进行适当改进,并采用权威的国家标准地图比对无误的地图文件绘制中国区域地图。以一个具体实例完成: (1)正确的中国国界线,省界线,九段线的绘制; (2)全球地形图的添加; (3)中国标准地图文件的添加。
提前需要下载准备好一些必要文件: (1)正确的中国行政区划矢量文件; (2)全球地形图文件(从大佬提供的方式中获取的全球50m分辨率的tif图); 以上的文件可后台发送“中国全球地图文件”获取。
6 u# {5 S. a3 \" @(如果没有下载相应库包,请先在anaconda或cmd命令行去下载!!!代码的详细说明已备注在注释中,不再额外赘述。)
# I; v! e& _% b, t, ~* P/ c; _- . j/ W1 i/ Y7 l' D
- " Z2 j" B# R6 J3 Z! [+ B) P
7 T# O' x' D5 s0 |5 z, W" m2 L" a. D- + q4 ^ t$ \" K5 C; x; v! B
- * c& y) P x9 L* p$ R& S
g" J P- Z& H8 e! a- ( _ |3 j" g2 i3 i. E! l% \ D
, U, T. C+ i( W% {% j, t; r
" V: C# x. A: e/ w Q3 y: b' |2 ^- . k- e, O/ g, W! [5 I, @$ y5 e' n
- ( t. Z4 x4 Z; M# j* p
% h3 P/ k8 A& i! d
+ L9 o0 h: O* u' M1 N
0 J$ G, U h, u* h
6 r& J' S! K' s! L8 U$ D3 H4 q" I- 4 L: ~1 ]- v3 d
- % n- v7 J! l5 E
- % j# d! Z9 u5 X9 `+ b- ^# b
, b7 G/ i* w! L) T6 O& G4 J
3 g5 y0 I* `* S$ r- g, F
3 i2 q+ n2 f P) x
$ @; ~% I1 H4 L/ d# M- - p) b% t/ \( r( B
1 R: u8 {6 f; x9 [: `- 7 ^. l6 u7 \7 E9 U# t5 I) c) ?
$ W5 G% f# d" C* g- , _1 U3 I; `+ R7 A6 w
B. f4 o9 V0 V/ M- 9 b! h: w/ r: Q" }/ t
N) M( N) @. [- E7 w
+ t/ M6 ]" m) W- 6 p1 ~5 C9 ]* D8 p3 [4 b. ^
9 v6 M4 }- B! Q) V# z7 T
3 l/ b% d$ r) q$ c0 A+ h
importnumpy asnpimportcartopy.crs asccrsimportcartopy.feature ascfeat ##添加地图其他地理信息所用fromcartopy.mpl.gridliner importLONGITUDE_FORMATTER, LATITUDE_FORMATTER #添加经纬度所用fromcartopy.io.shapereader importReaderimportmatplotlib.pyplot aspltimportmatplotlib.ticker asmtickerimportwarningsfrommatplotlib.image importimreaddefcreate_map():extent = [70, 140, 0, 60]shp_path = r'./cn_shp\Province_9/'#可后台回复索取(这里很容易出现问题)# --创建画图空间proj = ccrs.PlateCarree() # 创建坐标系fig = plt.figure(figsize=(6, 8), dpi=350) # 创建页面ax = fig.subplots(1, 1, subplot_kw={'projection': proj}) # 创建子图# --设置地图属性reader = Reader(shp_path + 'Province_9.shp')provinces = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='green', facecolor='none')ax.add_feature(provinces, linewidth=0.6)ax.set_extent(extent, crs=proj)ax.set_title('China map', fontsize=5)# --增加高分辨率地形图(需自行下载) #可后台回复索取ax.imshow(imread('./NE1_50M_SR_W.tif'), origin='upper', transform=proj, extent=[-180, 180, -90, 90])returnaxif__name__ == '__main__':warnings.filterwarnings('ignore')ax = create_map()plt.show()9 E+ J* G3 E& V0 m! Q" | d
. k% m/ s6 z( T7 c4 ]* s8 c- Y- ~% o
上篇文章(Python9:绘制中国/世界地图)的例3:绘制中国区域地图,包含海岸线 (如果没有下载相应库包,请先在anaconda或cmd命令行去下载!!!代码的详细说明已备注在注释中,不再额外赘述。)
8 G9 i2 u3 q' B1 Z1 Z
# V$ [6 F& I. n+ P" M8 B8 y7 s
r: S% a, ], |) ~! K( W! c# {: g
% ]1 }- A1 z$ `& x( ~" v- " F7 ^" A$ c& V3 A" c8 ~2 G
, C5 E. \- B+ G5 ]7 Q- 2 y+ [; A8 ~2 o2 a# N' R3 T* k I
- - p' p" L; o) L- Q
5 K$ v' g7 I: {2 V. J
' O/ _' _/ \/ U8 _: U& N. U- R! o9 U6 Q$ a
- / Y/ y5 L d; z1 t0 N/ F
1 P8 s3 k( i: e
9 m. X# Y; U$ t+ x7 {- ) t: F) J$ i$ i# L
0 `+ }/ l* z8 E- & [# U) I9 |2 s- s) z# i/ p
- " r8 G% P! e W% E# s
: ^" Y, x! u+ l, c l8 x# b: a
* [, c2 ]0 \$ W/ ^- b3 S/ Z9 P- / x$ A. U9 k: t
- + a- N" g& J: O# ~1 D* z- L
- 4 y7 C& A& _/ \ F1 i* H/ G
3 N. ]. T9 ^3 L* \) Y7 P- 1 K3 U' Y# a5 s8 ]) h
- 8 Y+ X, }: r$ u3 q$ v
5 Y- t4 W5 g% w& E9 n% d; y! s
, S8 |$ {1 j2 Y% P6 j% m3 k4 ]- 9 P% j5 Y ~) R
- / |; W* s$ h3 [+ v
- / a( T9 k# g9 b/ h. n% |: O" e& }
- 2 F1 X/ `" I, M! W
$ @- l7 a- ~! K& F
! j* R* L; q3 `. k* |- 5 d# m, Z* b0 G: ^0 k6 m F0 {- |" v
& N, P* y6 G; c' M3 p- 5 ?& [4 e3 P) x0 l/ y
. d) l; L4 z3 x8 \2 z6 g- % [/ ^- d* C G4 { B, K
- . l, z! [/ `: F' k C D
- : I& |; ^4 C5 V {% |
a6 s [ D) I' Y4 h8 `1 Q- v6 T
/ m/ A: X" d: ?8 Z- & ]3 U( h1 g( ^! K: Y7 N
* M- m' r7 t- f' g
1 ^; Q# u+ a. ]- ' W4 q7 D1 g. M( {4 Q1 F$ r
% V# k5 J! M$ ?- " O4 d' ?3 s2 r
- - S- g/ }1 u' [% x( @. ^
- ) M' J2 D" w; N- _
M+ n0 o& R" S5 z) l. H. X! c* V. d- [( \# J# B
##绘制有海岸线的中国地图#引库importpandas aspdimportnumpy asnpimportcartopy.crs asccrsimportcartopy.feature ascfeaturefromcartopy.mpl.gridliner importLONGITUDE_FORMATTER, LATITUDE_FORMATTERimportcartopy.mpl.ticker asctickerimportcartopy.io.shapereader asshpreaderimportmatplotlib.pyplot asplt#数据data = pd.read_csv("meteo.txt", skiprows=1, sep='\s+', header=None, names=['station','lon','lat','tem', 'pre', 'sun']) print(data)#建立画布fig2 = plt.figure(figsize = (15,15))proj = ccrs.PlateCarree(central_longitude = 115) #设置一个圆柱投影坐标,中心经度115°Eleftlon, rightlon, lowerlat, upperlat = (70,140,15,55)#建立子区域#ax1 = fig.add_axes([left, bottom, width, height])f2_ax1 = fig2.add_axes([0.2, 0.2, 0.6, 0.6], projection = proj)#在画布的绝对坐标建立子图f2_ax1.set_extent([leftlon, rightlon, lowerlat, upperlat], crs=ccrs.PlateCarree())#海岸线,50m精度f2_ax1.add_feature(cfeature.COASTLINE.with_scale('50m'))#以下6条语句是定义地理坐标标签格式f2_ax1.set_xticks(np.arange(leftlon,rightlon+10,10), crs=ccrs.PlateCarree())f2_ax1.set_yticks(np.arange(lowerlat,upperlat+10,10), crs=ccrs.PlateCarree())lon_formatter = cticker.LongitudeFormatter()lat_formatter = cticker.LatitudeFormatter()f2_ax1.xaxis.set_major_formatter(lon_formatter)f2_ax1.yaxis.set_major_formatter(lat_formatter)f2_ax1.set_title('Chinamap_coastline', loc='center', fontsize =15) #图标题名#读取shp文件china = shpreader.Reader('cn_province.shp').geometries()#绘制中国国界省界九段线等等f2_ax1.add_geometries(china, ccrs.PlateCarree(),facecolor='none', edgecolor='black',zorder = 1)#添加南海,实际上就是新建一个子图覆盖在之前子图的右下角f2_ax2 = fig2.add_axes([0.8-0.6/7+0.01, 0.25, 0.08, 0.13], projection = proj)f2_ax2.set_extent([105, 125, 0, 25], crs=ccrs.PlateCarree())f2_ax2.add_feature(cfeature.COASTLINE.with_scale('50m'))china = shpreader.Reader('cn_province.shp').geometries()f2_ax2.add_geometries(china, ccrs.PlateCarree(),facecolor='none', edgecolor='black',zorder = 1)#出图plt.show()) i' r. W' n, H+ d# n0 V/ Z: h
- @* G+ c" p& _! t' V* w, a. g
% \: ?9 `# d/ `: U/ }# \3 R0 x颜色表:
1 U7 V' L. t6 s( I" R( M" I' B
& x* Y7 a6 \( y. {, F
|