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

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

[复制链接]

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

( [+ ^  F# T; G' B: j0 V' F

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

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

    . V9 s3 G7 t: f4 I

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

3 h6 x( z% u  D: F+ M

绘制面积图和填色图

2b2b8cffc67a22fcc69646ca599a3645.png

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

014dfdb505f25bf97af4e4013898632f.png

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

  • 8 ]- P3 Y$ X2 l  a4 ~! v  f
  • ( p) `4 ~& A/ r% ]
  • 7 v* F! V# ]6 k
  • ( K% H" F; d" s' ~$ a$ c% p+ C- _- i- Q

  • + k* O4 O% J) E5 x

  • ( J  g% n9 _/ Z9 H% r

  • / W$ v# \8 R# K- m  T9 H6 o+ V, X

  • 4 z8 I' l0 I% V. J4 \
  • 4 S5 ?0 R/ K; Z
  • 8 e6 d' |  l' L2 }" |" |

  • # p! J( h; M$ v0 a  K

  • 6 {+ j8 D) v, q$ |, F

  • ' v$ S5 C8 n7 T  Z, F, _
  • 1 E) |! C' L9 l* ]

  • 9 `" O" X/ d! q, d9 w1 y! i
  • 7 G( T8 S$ G5 N0 O+ m; a# W

  • " K( x, V7 A. O+ o: F" L
  • 9 m7 Q4 o+ A$ i4 F0 ?$ z
  • ' I& K, Q! j# {& @5 y
  • " c8 r6 d8 c* N. h/ p5 m" U" `$ ^

  • ' ]8 l, ^2 H8 M' y! g& H

  • 9 w! Y( _  S; ~( r5 I5 Q+ e

  • + W5 N/ q, L9 s0 @. r

  • & }7 L0 C: U/ c3 g: |* n

  • 7 H) j" Y2 D* R) J( B
  • & n% ?" T! @! l, C
  • " E) w1 J1 N" s6 I

  • , |* x8 j5 a5 H* {2 H2 F3 K

  • ! u0 }3 m3 ]% F
  • 8 u5 T  _: X  J- p' w* z# G$ H

  • 8 I6 P7 c* ^+ \: R  s% `
  • , ?" V, w: B; i/ O/ }
  • % L# V+ v$ ]+ u' x; ?, I3 ^
  • 4 B+ o- S$ N& ~$ \; {1 M
  • : m9 h( l! A& K3 i9 A

  • 8 Z1 J: I, E6 u, x1 j7 g6 h  S
  • * G, u$ V, z5 ?7 t- U# |
  • ( q7 c8 A+ ^. X
  • + z1 V9 e7 j+ M# ?

  • 4 _0 ?# l+ P5 I4 t5 i* ~, j2 v2 @
  • & W# [' l( P: _) V/ Q! F4 u$ j
  • $ H0 p( z( L# e
  • / f$ o6 y$ z8 s

  • ) @, m! k- O( i7 ]
      n0 o  c. `% C

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


' C& G8 ?0 c7 N8 P9 h0 r4 u% z. u9 o
回复

举报 使用道具

相关帖子

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