|
气象数据可视化主要依靠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("···")
! i. L6 N8 [0 o: A) L
只要按照以上六步,基本绘图没有问题!!! 3 v2 w8 }! z" f4 E" |' g7 k' O0 N
+ H9 q) ~) {; C' @& g' q
绘制简单气象数据图 - 9 w+ }" `( P; E( \7 q% z- f- J( f
7 m8 H4 ~/ c/ }, S0 P& M
" i# ] q( t) V, L- 3 I8 Y- T) g8 W- I+ q- W
- 8 E& O" y3 G! I% m, h" q
- 8 V" m; Y% e9 ~
4 h7 A* Q9 [- T: i2 a+ d- $ I; R2 @( G, u6 w* l7 R
- $ M! k8 ^) C$ K! Z) i& e
- / @0 v3 W6 @# {! A& o" h$ w# K: M. z
- 4 @' q2 r s7 E% g) d! E! y
5 M2 J; x/ R& W% g* _- " Q$ _+ K6 s# Y
# z% G% {3 _; g' q1 @# G: t+ P; M. \$ b+ x" P; l" x: d' s& D/ O
######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("画布")1 d4 S, }. \/ P6 Q; Z8 ~( I) y) f
备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi. figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。 dpi为图像解析度,过低的话会使图像模糊不清。 基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。
这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。
3 t; Y) e! N& G, ~ } H- , N2 k3 V8 N) A5 d- D
! Y" J: |& f7 G1 M- N7 K- 8 R( }/ i9 X5 K" E+ H+ e
- ; v/ P( x, k. d/ E8 p9 @
x' z, C8 G- W W j2 J5 ~5 C. g
7 w6 s! j& w! w- z/ r
* t8 y0 i0 d( l, V3 E% B
: |' ^4 N) ^8 [5 d- 2 i& e3 U& I* y3 [1 E/ i
* V- g- ^4 f" x/ _/ [6 U- % ?- x6 ?; z$ m: A% |0 n
5 c0 d+ |' Q- H
; u/ e# i# G/ c4 m7 A4 t- ( K0 `) O J4 _9 u; D+ U
5 Z% a2 U( y% d( p& x- : n! `" V8 u# Q" v
- 1 b) i1 [8 y1 D1 h7 b9 m
! J* y" ^" _5 r) C6 t$ u% X* m- W- W3 F! {/ y4 N/ k2 h
7 w# R: q- P" G$ n% @1 C4 g- / `; F0 ~$ t/ O- K5 j" H
" Y8 [3 A6 K& y$ B' s
, z+ D9 |* X; c, c, n/ l! b. S
######引入库包############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()2 K8 X7 ]( i/ \& k; l p) R% D
$ p0 C5 e7 f* k- g3 c
5 M, [- J9 N3 t
例:线条样式不同:
7 O) o t( w$ R; f1 S: A5 X" M
- }( s3 R( z8 N! N/ o0 _, p
* Y( m6 x" W2 P) t5 O
- K& T3 U& L2 D5 w X" J* d- 1 ?; i5 p) [5 p( I$ p
T( \5 K2 Q( u- 9 O) ^" f7 y1 S& t
; O1 M$ \" _6 W
! l4 H9 b, U: X9 }1 f1 t- ; v) ^2 r; `" L* J
- : k: x: v( K- s. [3 r
7 J+ [0 O7 S4 x# h, K7 _" O( d' X( `% E
. E( j0 m. @$ D5 U( _
, l" @9 Z0 m x) M- : I% H- o5 h3 `) z' u0 H" s) D e
' D6 W, I' v4 }- ! D/ D# ?, y& W
& D0 w: R3 G8 W1 Z- $ d. B; j& ^$ e8 ?) N4 R3 {' e
- " v6 |0 M2 g8 w, x- J5 {
2 K5 B3 a J* a7 n! j% Z5 r- 5 x2 C0 G+ K R6 [- o
! s1 D! V2 F0 F& g
######引入库包############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()
6 J) R" j3 C5 y: }' p0 W - j. ?( ?8 T; [/ E. a
( D- V" \/ R# @
例:线条的透明度和颜色不同:
- 4 N6 v0 `. Y" X; l
* c; H/ E2 F& ~7 A- ' T* z1 U1 Z+ g& B G3 G
- $ e3 e$ Y" ^6 H1 f, }
2 g8 s! G( Q% e8 ]$ |1 z- 1 j; x6 J2 H4 n0 Q8 @2 s
- 9 I; f' v8 W% ~9 {) s
- 3 O1 w9 r) {* u& u
- y% j) Z8 D) C1 r5 a! ?
" Y5 f9 o/ {1 I1 m. w8 D
# d1 F: J, g) l
% {# U" w! n8 L+ c6 {- ! N2 j3 l+ g: X' s
8 G+ F9 |/ D/ B4 L8 C* C ?
" L* _) D6 f& H& b3 g
$ ^: ^* P4 z) E- D# Z* g6 b- 4 D N1 P$ q, S' U0 I
- ! M( f+ `5 H# }( ? ~( N' g# Y
- , d- G- d# D2 u; X4 G( `
- * x3 ` o3 L$ g. n1 c( g
- ; R9 @/ i L$ o6 ?
4 n. f0 I+ m. O9 x2 v
######引入库包############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() |