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

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

[复制链接]

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


7 G+ t; L. z( C0 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("···")


      @. d+ M( s& F5 y3 @9 N. w# ?7 V, y

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


; o9 A1 {- j; J2 C; i* S0 S7 ~

绘制面积图和填色图

2b2b8cffc67a22fcc69646ca599a3645.png

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

014dfdb505f25bf97af4e4013898632f.png

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

  • # A3 V" d" A8 l6 `; Z
  • & d4 H- s9 ~$ h# ]/ N! G" Y
  • 9 V* j% J; z! h6 ^& c, Q
  • & F! V3 e/ B- Q4 P) E" U7 V
  • # u( h: B6 d2 J# k- C; l

  • 2 C" \0 G! f; e" ?) K

  • 3 f9 Z4 ^* B+ D2 U( ?( j

  • / \7 S. g) B0 u: l
  • . F9 ?5 n" J( O( A% S! @
  • 6 c  L* N: z- }
  • " W3 `) G' j/ d' {
  • * W; p/ p; y6 g$ |
  • . z9 T8 E! J5 n; Q/ k. ?% A

  • : n/ t1 M7 h: G/ G$ A% ?# R' ?
  • ( r9 l# N' B$ J" g& h
  •   G( Y# _( ]! R# ~: X

  • 2 K2 E# r6 @0 ?9 ]! t& ?4 G7 G

  • ) f; T" R( l% Z

  • 7 R( A# D! x& U8 e+ y& f+ ]

  • 3 ~$ @3 l' y! K8 t, A2 P, P# A

  • 1 m7 G  [8 `0 h' H/ q$ U
  • + ?' A8 G5 `2 g. W
  • + i& Z3 g* g. w
  • ; s( i+ }0 g; \" j
  • # t6 g! |# J# V6 ]2 w: {5 U

  • / c% e/ W4 r" h( b% U( C
  • 1 X1 {: Y! w* p* o9 t' J0 j

  • - ]) D2 L3 P5 v2 l; D

  • : J  B) h# t2 N
  • & `2 Z3 X7 }0 Z  q; t& ]
  • / t  S) ?6 p$ y5 w1 t* \
  • ) [4 G' q/ }+ h9 R( A$ b$ A- H6 q
  • ; M0 _/ Q3 _' d/ A, a- f. L% K

  • ! z! f* X0 L: ~
  • 3 Q! o2 {# q( R8 g& U" A
  • * R; v1 p% [( _8 n% ~1 V9 p$ _  y

  • 1 s! U2 g) ^* k
  • 4 H* b; g3 b  z6 p$ O: B5 ~

  • & D: U2 [# b/ u- e% o  I

  • . Y% }% [* i2 E/ s. z8 B
  • + x( c* ~6 B7 ?: m6 L
  • , V. Q4 h+ Q- f& Q" k
  • ' s& C4 `8 m9 M& r& [$ d4 ~

  • : _$ V) s; b, Y2 L7 R$ x" f- |: m, s! A  r

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


! q1 {  H/ e  G: R$ \- Z
回复

举报 使用道具

相关帖子

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