气象数据可视化主要依靠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("···") * }" b9 i0 \. m5 \1 P
只要按照以上六步,基本绘图没有问题!!! - o5 c2 C' G& Q9 v0 t# f& m6 P
2 r) m+ I( w5 t# p1 Y
绘制简单气象数据图
- I% m+ ?! W# h8 B" E- 9 T6 v) k5 L7 Q, W
6 ^; H6 X- Y1 A5 d9 e
$ O3 M( N) W+ p6 O0 N/ V: M
0 I( G' Q% g- `) S9 |
0 g1 H0 E" g; m8 H3 k- U3 L6 u2 k I/ ?- V- 1 @: d% Y) H4 e
- 5 Q G8 j5 `" d- F
8 O3 ~+ a4 d, Y% E* p# [
0 {; e0 v( ?( M8 c0 X" B) m* O0 `- 7 D3 X; w) T6 ?& {- ?' u" ]8 L P
8 ?7 d' L9 J% r5 C- {5 Y$ I) |! c
: L$ r, q. n% o3 s: y/ i9 H- 2 D1 h- L# J. A% `3 c8 v
7 H/ e% j8 a* i# R0 f
######1引入库包############import matplotlib.pyplot as pltimport numpy as np######2画布############fig=plt.figure(figsize=(3,3),dpi=200)######3虚拟数据########x=np.linspace(0.05,10,1000)y=np.cos(x)#####4线图命令#############plt.plot(x,y,ls="-",lw="2")#####5出图#############plt.show()########6保存图片###########fig.savefig("画布")
$ k ^5 @( j0 c" [7 l# C! O
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
3 h: p) e- ]8 `% S& K6 n
2 P9 D: \$ v i8 k- N
7 ]* r+ V6 K) j" G- ; U, J$ ~) p- t+ b: I
- - I: V/ p8 ]" h
- & H5 }0 e9 ]. K2 L+ ~9 t
- & q( }- `5 L$ f( O2 ^. _: k; d, o
5 K: x0 k" |5 y( e2 E- & m% R i+ V# `8 I
9 j0 m4 t8 j. v6 B; U/ }
: [. A$ w+ [8 w( ?2 d
$ z% M Z2 p. n) R; ^- , U* y1 S& s! o$ {! E
- & w+ E+ K1 g& F1 H) r. O" Z9 c
$ ?- z) c" Z2 r: ]' K" `- $ z8 k: T( U3 c0 C- A
7 B4 Z- ?+ U/ X) t* e6 Q3 e- 4 e2 Z1 O% W7 f( R7 h7 T5 t3 x' p
! r4 l; \5 F O4 E; Q
5 c; E! q' y& d7 q' Y# a: p' ?- 8 |+ w8 b% j% S( I
5 i) X$ ~4 B( o+ {% k, K' k9 ]$ e- t8 s1 i" n, u5 X* I5 s' W/ ^& m3 _
3 M* W4 {9 r3 e" W9 L4 c% Z5 u, c
######引入库包############importmatplotlib.pyplot aspltimportnumpy asnpimportpandas aspd######虚拟数据########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.sta2######画布############fig = plt.figure(figsize=(10,15),dpi=200)######划分子区域############ax1, ax2 = fig.subplots(2, 2) #####画图#############ax1[0].plot(x, y1, ls='-', lw='2', c='k', alpha=0.5) #折线图ax1[1].bar(x, y1, ls='--', lw='2', alpha=0.5) #柱状图ax2[0].barh(x, y1, ls='-.', lw='2', alpha=0.5) #条形图ax1[0].set_title("plot")ax1[1].set_title("bar")ax2[0].set_title("barh")plt.show()6 U! |7 a5 |. H! H
: |1 i' a* T5 S' ?. Q6 G 3 Q1 c2 C/ q4 s" N8 C
例:线条样式不同:
- ; G) g* g/ s+ z# i1 r9 X1 v
- - C/ A3 h8 p- p
- B& Z' u5 M% X' K5 N3 ]0 e
& T R( m+ W: I( Y- ( U1 j. T6 i8 J# g8 m: ^
- 9 \- M% b8 N0 F6 m
- 0 D4 i4 V) Q7 l/ r" Q, D
$ y$ F" m' G# f9 O- A3 S; D
" N* F! W4 Y1 t- D- 5 {. n3 w3 L- [3 P9 `+ \; f o- {% o0 i
- - D5 S# \$ `2 R9 O9 y/ L
- ! D) \+ e/ e' G! K
4 Z: v; H/ Y. X8 I1 |- X
' t+ a# z+ I4 { R- : A7 V7 J- ^0 s
- ' l) t9 A) S% ^6 v' ^, q. T- x
- 7 a! P6 ^- w$ s* k& }# S/ [
- j* ?# J: N8 V% H' D7 M. F
2 c6 P" \8 Y1 F- Q- p8 c; t
6 {( a& `8 F' z2 o' n6 C
8 K, U0 `2 Q1 O0 ~. f8 d+ ?* h- 5 l6 M1 v9 F) h! b5 ~. Q- A
9 S$ A$ A% d2 T$ B+ `( O
######引入库包############import matplotlib.pyplot as pltimport numpy as npimport pandas as pd######虚拟数据########x = np.linspace(0.05,10,100)y = np.sin(x)######画布############fig = plt.figure(figsize=(10,15),dpi=200)######划分子区域############ax1, ax2 = fig.subplots(2, 2) #####线条命令#############ax1[0].plot(x, y, ls='-', lw='2', c='k', alpha=0.5) #线条为实线ax1[1].plot(x, y, ls='--', lw='2', c='k', alpha=0.5) #线条为虚线ax2[0].plot(x, y, ls='-.', lw='2', c='k', alpha=0.5) #线条为虚线ax2[1].plot(x, y, ls=':', lw='2', c='k', alpha=0.5) #线条为虚线ax1[0].set_title("ls='-'")ax1[1].set_title("ls='--")ax2[0].set_title("ls='-.'")ax2[1].set_title("ls=':'")#####出图#############plt.show(), |8 Y. c/ L6 ~% d- s
/ o) }- v. h6 g! @2 l0 t* D9 C* l9 q 3 s8 E' `4 f' z* }
例:线条的透明度和颜色不同:
, p5 n( i1 h1 J
: U8 b, Y8 v; W5 P: c2 @5 r- z" o! h& ^9 L3 a
- ( @: C+ K' A4 e/ j5 N, y
- " `+ s3 ~ W$ d0 U. Q* G
- 5 w' @, t$ i7 Z
9 b$ i9 v6 W5 D) \- |
; w5 E3 S2 H6 `" X1 w
* J, L4 Y/ c/ N' J5 @# T( q# ^- 9 b! D+ f, H' R. O/ R z& |
- : N5 P9 G2 T' a6 L- q
4 h: @4 Q/ T: Y. [9 K; Y- z
+ C; g) e' B9 w: Q y$ ~- & J8 ^) t( p/ I V8 X
- 1 @, E* b5 ?& X8 B0 z+ S* L
" O7 n# x' g8 n- 1 s0 Z& J3 i! F* T
- 5 p! S5 ] B5 A" `2 R
& H( E+ s7 j2 e$ k7 r- 1 q' ?; f- k( z( [- M) J7 p# V# ?
- ' H Z# d* w9 v# E6 h1 c9 T" b
. A5 {1 M8 ~, G( v Q' |5 e6 G
######引入库包############importmatplotlib.pyplot aspltimportnumpy asnpimportpandas aspd######虚拟数据########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.sta2######画布############fig = plt.figure(figsize=(10,15),dpi=200)######划分子区域############ax1 = fig.subplots(1, 2) #####画图#############ax1[0].plot(x, y2, ls='-', lw='2', c='k', alpha=0.5) ax1[1].plot(x, y2, ls='-', lw='2', c='b', alpha=0.1) ax1[0].set_title("alpha=0.5")ax1[1].set_title("alpha=0.1")plt.show() |