收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

[Python] 【气候软件】Python7:气象数据可视化的绘图基本流程

[复制链接]

气象数据可视化主要依靠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("···")


    2 U- Z; R4 a1 d2 m4 v0 g1 X- T

只要按照以上六步,基本绘图没有问题!!!


6 |4 ?6 Q- @8 O* R6 F' c/ l: {, g& O$ u3 M5 Z

绘制简单气象数据图

  • : f9 j1 b3 _2 Z5 u3 {
  • # v" A$ u( {" i/ v7 }8 O

  • : O8 \! @8 l' R/ W  t; D
  • + ]0 V- {) w& s7 l( Z9 g6 g6 O
  • - D# L- {- |/ H6 ~0 n) H' T$ \

  •   T* ^) w0 K. s' ]8 e
  • ( ~3 D+ Q& P8 B8 y% Y% N* ?5 k; k

  • 3 Q* J" ~- B# t+ I9 s
  • 3 h; G/ F: ?/ B. ~- P
  • . @# D3 v) ]4 \9 M
  • 9 |' J2 r& p6 w8 S+ e% L1 c( a2 e
  • & _" M$ ~( J9 ?8 V. a5 x: ~8 v
  • ' \* j0 Q: c- y8 F+ V: I

  • ' R. S5 \. d* i5 q  p
    1 y: j& o. A3 x5 k" W& j( X

######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("画布")8 T9 e# [5 \* C- Q! C6 l

3222ca850649b6f730a155691403ec39.png

备注:创建了一张画布,figure里有两个常用语句,一个是figsize=(),一个是dpi.

figsize=(a,b)语句里面有两个参数,分别设置画布的长和宽,单位为英寸。

dpi为图像解析度,过低的话会使图像模糊不清。


, P, Q% S# p9 P( X  V5 O! d! C8 H                               
登录/注册后可看大图

基础的常用绘图命令有折线图(plot)、柱状图(bar)、条形图(barh)、散点图(scatter)、直方图(hist)、饼图(pie)、箱线图(boxplot)等等。

a9db2c0d586d2c65693594bef673005e.png

这里的数据引用的【气候软件】Python5:绘制气象资料的多区域子图里的某地1979-2019年平均气温为例绘制两个站点气温时间序列。


  • : h7 B6 M2 M( O  A# G

  • ( x1 m, Z) t$ y3 b# D* ~

  • ( {4 o" c, G2 q; C3 k: Q3 ^2 f! x
  • : O# H& `4 ]' l. t* C$ G
  • ! n& c5 P1 n- X9 |) o. I# s

  • ; }; Y  X/ ~9 y( y/ x: R

  • - C# B7 X- o6 S' i
  • 6 ]. T- }! i% Q, R1 ?8 R( j

  • - Q' i0 K- }2 l$ O' M  f

  • 1 Q9 v/ p- z+ z9 ]1 `: O6 Z

  • 8 L7 Z, X0 G* v5 @
  • 9 |; J; Q; W, o4 X4 ~9 \4 ]

  • : e. J1 C) y3 ~& f: g, l8 u

  •   U  j# a$ V2 G$ ^# h# ?$ }' G
  • 8 d! V- L" @5 w

  • * T1 @5 m) ?( |2 f

  • # _: L- Y# }; u0 G" o

  • / }6 j0 E0 M. h* }

  • ( ]- q# P7 W( ~' k+ e: m
  • % a* h$ c2 ~1 u% C% H* i
  • " }* H0 K+ r# U( \% ~) ~0 c

  •   e: K% S* b* n+ B5 W

  • ' q! s5 J! E1 k- L0 @9 e' q7 t

######引入库包############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(), ]" E4 H; ~4 d

) o) O6 q0 {* y5 U


& L% o% y4 U, a5 P; \  ^2 ?                               
登录/注册后可看大图


6 t& R+ Q" d$ P# o

例:线条样式不同:

9b568f4cade8c1d20e7d15589d727254.png

  • ) A" X) u# I; e  h6 c, W& {

  • ) T$ ]! n" ]0 P- h) }$ |
  • 0 B0 c9 p' E: n, z1 q
  • 6 g+ z# m" x7 y( `' j  S# l6 w

  • ; S% P' n0 U% W& R% p- `, Y& x

  • ; g, k' m" y7 h
  • 2 Q' U$ L$ I4 ^, H6 u- E
  • ) y: Q* y7 o: Z3 K* w6 b

  • , j) c* k+ x) U9 r; ]; ^
  • ) J9 O7 z1 s$ j/ [
  • * a' y  T+ t- r) }: a' G
  • , R3 t" T+ e( q1 P) V( ^' r

  • - ^  H$ d! W" p! e. q

  • , |0 g( r& H  ]- h

  • : D/ k0 d/ R: E* G. t( Z) K

  • + _" L% h; i+ H, i
  • / Y- ?) J" G7 B8 J3 l# s9 f
  • / r4 d' a5 A2 I/ D

  • - d$ f, ?$ ]5 l0 J

  • , O. L  h+ ^# F2 f: H% Q1 G

  • + ^3 {$ h( O% J, @

  • 8 l; |; A, _+ k' ?' l; F* i
    ( _, l, D. b) T% n+ }+ [( K

######引入库包############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(). |; L5 v) o1 ?! S0 `/ Y

6 b5 y3 l+ n7 s

: b% x# `  i6 L1 E
                               
登录/注册后可看大图


6 q8 S# ^0 e+ Z  d4 _- l

例:线条的透明度和颜色不同:

9d9110a408fbe81329b7cfec01cfda76.png


  • % O* {4 z; N( V- {6 b

  •   I; R6 ?$ v9 Y8 \+ V1 E' X
  • + D+ a% Z6 Z3 i

  • + b  e3 C( k0 @" D" \5 h( d
  • : F$ D! ^) x  l) N5 `7 [

  • : b' ?; A" ~- E7 I3 B5 Z8 w/ g
  • ; F; n: S: y$ G( \: |, N! n1 [
  • 2 s8 V: N* g% V

  • ; q$ h0 r3 P. [* D1 U- U7 L

  • ( D$ C4 b7 p5 S3 C- H6 Z
  • 5 T# {% {, h8 ^& j3 |* V5 i

  • % b( K9 e$ J7 x+ J+ F4 ^

  • , j* l. b( g! c# E
  • 7 h/ M6 R$ K) _0 I+ G9 j

  • 7 r* g! s  {' w* u
  • - O- `) X" z* o8 e( N# C+ A* P% @

  • 2 Y# v9 b7 f. q' i- ]! q

  • . z) B0 L! O4 M7 B
  • . v, _  r3 q1 s) b
  • 5 Y* N5 z9 ]2 {

  • ' u. m3 c7 l( L9 A& C8 t% z( F1 \, P9 Q

######引入库包############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()

回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
有风
活跃在2022-10-29
快速回复 返回顶部 返回列表