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

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

[复制链接]

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

' ^/ Q, U% }  ^! Y" f5 ~% x

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

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

    7 p4 j  d4 A- Z

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


5 p  Y( q0 j  m  [" r* ?% Y

绘制面积图和填色图

2b2b8cffc67a22fcc69646ca599a3645.png

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

014dfdb505f25bf97af4e4013898632f.png

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

  • # q6 n& G: Q9 h' L; z7 c1 C
  • 7 M3 V. O( p$ a2 p
  •   m8 }* J/ R* @) y0 B6 R2 J
  • - `3 m- b. L' q$ {+ x

  • 0 o" W8 V& F$ |5 x5 n

  • 2 y! c5 N3 i" g3 C: M7 N. g

  • 4 p3 [  v# q3 _/ ~5 L

  • 5 b+ t; O/ Q  V, U5 M
  • # ^3 v& j' l3 M% x' Z! B, c& j

  • # U0 h( J1 \9 x% {" l

  • , M& u% T, c6 G% t: t/ i
  • ; F2 x1 o; g1 s

  • & Y) f  d- T% D2 Q0 a3 p

  • - q2 c2 M/ ^2 E, `
  • + A  k5 K: }9 @0 p! N9 e3 v) _
  • 3 m2 B# g" `/ H2 A& u5 d

  • 7 R/ w2 A1 b6 s4 Q
  • - ?+ F. N( c* d. v) F  l9 k, B
  • . Z  Y" O  R$ m
  • ) K- M, }/ N& f/ |: O

  •   ?; a6 L; y' E2 c

  • % m% g+ J+ E+ N
  • 2 i7 s0 e* m. Y) }8 M, G

  • 6 T& @, c8 R* ?# `" {% q

  • 9 T0 f: T) t$ V" Z) W% a/ {* ]
  • : |' A  {3 O% t9 z6 ^7 p/ _

  • . h" \: _' z1 o# ]

  • 0 h, ]2 B2 N6 V6 Y% `

  • - E5 K) {' `1 l2 T$ ], X1 p, u8 ?
  • % P% C; g6 C# N. v
  • ' B7 [* l2 D' U- k! o' h2 Y

  • ; G  V1 B4 O" J  p; v: [

  • 6 E1 u2 q7 }- o3 ]7 [' V

  • # F; h0 h- f" s/ m/ j5 M0 s& {

  • % N- |0 b) W: a8 X) J/ u3 B

  • + U. ]/ U, G! N+ ~# S) v- M

  • % ^+ q' X5 p% \+ z( N/ c2 c
  • 5 ?; H. i5 M6 \1 `! [$ G
  • ' j/ G( R0 Q; q$ ]1 L

  • . R4 T9 T  a2 P0 p- v# _$ s
  • ; Y$ K- t0 u# z6 r( B
  • - r$ e- b$ X# m8 ]& f7 z) ~' j
  • 7 \$ Q% S2 W5 \% Y

  • 3 Z' ]4 H7 x5 N1 D
    6 W& ]& M, a4 w! d2 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()

* L& m$ Y$ y6 J* p- D# r7 m# U- X2 I
回复

举报 使用道具

相关帖子

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