[Python] 【气候软件】Python8:绘制面积图和填充图

[复制链接]

气象数据可视化主要依靠matplotlib做绘图,其他库包为辅助,包括数据处理的,地理信息处理的等等。


! U: }) ~2 O, J" p3 [7 r# M  s

绘图主要有六步(“六部曲”)(不是绝对的方法,视具体情况使用):

  • 引入库包: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("···")

    & t" _6 t- G' g1 E& _8 B# ~

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


; M" I# Z  L; O2 N3 O

绘制面积图和填色图

2b2b8cffc67a22fcc69646ca599a3645.png

(有的时候需要画这种交差的填充图,能直观地表达差值的变化和含义。)

014dfdb505f25bf97af4e4013898632f.png

下面直接上代码(关于代码的解释已在注释中详细说明,应该能理解):


  • ! k! n( c* W# H; K, Q

  • # r8 c$ q, U" t! h, k
  • , r5 O% B4 M& N% z# P! q3 e
  • # J! A$ h6 r7 T8 E/ B! T

  • 3 o# p+ x5 M9 m1 b0 K; A# z

  • ' y" C" t+ r. z- a$ e0 _
  • + S* h) A0 p) C  D4 q6 I* W

  • * t" _6 m3 v2 ^; j# `5 B
  • 4 v9 H' |# w/ }

  • / E; u* R) t2 P4 q- S

  • ; o( L3 P6 L8 ?4 f, _9 n
  • # K' @! @; d8 a4 J

  • " g, G3 _  O  {1 L4 y5 v, C

  • 6 u: l9 H8 p) X  Z9 [" |( c+ p  ]3 X
  • 4 N2 D) S( ^4 f) C! i+ ?- x8 R2 n
  • 4 a- d5 J1 c3 z: X

  • * C; G# Z6 n. x0 Q& M" d: m
  • ( m) k6 e) g$ n# o) v

  • - y. Q9 D- ~8 C8 A

  • ' t! P0 O6 |" U& F, B6 D
  • ( X' ?+ ~/ M8 A8 F
  • & |& }, ~; b- O7 j! B9 z
  • " @% ~0 ]% ~& `
  • ; m$ Y7 O; n. t# ^/ s' l
  • $ m7 t/ m# c4 h0 z
  • 4 p# p! Z! H0 H
  • % Z. t( |* W/ c/ }% G% E

  • % j( L* X# V" g* {# K& V; @

  • $ f6 K+ f' o1 e! N: t! ^
  • ( Y6 |0 B- d4 d4 G) o

  • ) o2 U6 B  y$ L% ]+ E& G1 J

  • 4 ?, M9 W4 F8 u) Z
  • & c4 T5 `9 }+ g: \  V% W: S* a6 r

  • $ Z: A0 j, A, L. q4 k2 G/ c/ r( m
  • ; `9 W( p6 g: p4 K3 ?5 j& E5 {
  • $ L: o% ^/ N" Z& D9 z( M
  • , K8 U  n1 G2 m/ b1 p  j/ \7 m* P
  • " v- L6 O+ o, E, @, E- r
  • 1 o; i% d) F! ?" J$ N

  • % I9 F( F4 i" t8 c) c9 ?! e
  • - M  S& u5 b4 V" r- K/ T: F0 D

  • # I' q" M, |( ^' i2 ]' Q
  • 0 R: C4 j' w- u. T
  • 5 e3 V5 l. T# ~; Z/ b! i, K
    ; u7 k( ~# [! s' ]3 K0 e

#引库importnumpy asnpimportmatplotlib.pyplot aspltimportpandas aspd#中文及负号处理plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False#画布fig = plt.figure(figsize=(15,6), dpi=200)ax1, ax2 = fig.subplots(1, 2)#数据x = np.arange(0.0, 2, 0.01)y1 = np.sin(2*np.pi*x)y2 = 1.2*np.sin(4*np.pi*x)#绘图#子区域1绘制限定区域填充图labels = ["Fibonacci ", "Evens"] ax1.plot(x, y1, ls='-', lw='2', c='k', label='$y1$')ax1.plot(x, y2, ls='--', lw='2', c='r', label='$y2$')ax1.legend(loc='upper right', fontsize=10)   #图例位置#ax1.set_xticks([])  #取消横轴刻度#ax1.set_yticks([])  #取消纵轴刻度ax1.set_title('fill between where')  #图标题ax1.set_xlabel('x')   #横坐标标题ax1.set_ylabel('y')   #纵坐标标题#填充图还支持限定条件下的区域填充ax1.fill_between(x,y1=y1,y2=y2, where=(y1>=y2), color='skyblue')  #对y1>=y2的区域填色ax1.fill_between(x,y1=y1,y2=y2, where=(y2>=y1), color='yellow')   #对y2>=y1的区域填色#添加标注。xy:标注箭头想要指示的点,xytext:描述信息的坐标ax1.annotate('y1>y2', xy=(0.3, 0), xytext=(0, -0.5), arrowprops=dict(facecolor='black', shrink=0.01))ax1.annotate('y2>y1', xy=(1.7, 0), xytext=(1.8, 0.5), arrowprops=dict(facecolor='black', shrink=0.01))#子区域2绘制堆积面积图ax2.stackplot(x, y1, labels=labels, color='yellow') #堆积面积图ax2.set_title('area picture')  #图标题ax2.set_xlabel('x')   #横坐标标题ax2.set_ylabel('y')   #纵坐标标题#出图plt.show()

0 \8 U1 |8 c2 W! N
回复

举报 使用道具

相关帖子

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