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

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

[复制链接]

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

6 _- s) c0 P! n* {# C

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

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


    / y, h" Y+ F5 f* ^7 Y

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

# ]( {7 Q( V( D4 M& k9 B$ B- r

绘制面积图和填色图

2b2b8cffc67a22fcc69646ca599a3645.png

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

014dfdb505f25bf97af4e4013898632f.png

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

  • 8 ?% b+ \! K& y! H: y& l; J+ G
  • 8 Z- Z" j. ~1 K/ p0 r

  • ; [1 w$ l3 k3 L: f2 y' L+ F
  • 9 W( V0 h; n& a/ H- [

  • ( w# K3 w+ s& F5 z* }

  • ) C+ f6 X5 ~/ G0 s

  •   \3 s7 L8 a" j# `, H' o4 L$ V8 T
  • 1 {- E3 u! G, [/ y4 i0 j
  • * d) K9 Y2 [, v) ~/ A
  • . T; k, T( u7 _9 J7 l5 A) W
  • , h3 G" B" ~) U, y2 a5 C3 i

  • 4 j6 G" C  R" L3 ]+ ~7 {" X

  • ) w$ N- g) P; f0 m: u3 R$ G
  • 5 v, j! I8 n( F7 S6 ^  Y3 O* M
  • 3 a9 W+ _9 I5 M% o5 @+ ?, d- v
  • - d2 S& H2 z1 Q# T; P
  • % E% C0 y- N+ \  ]$ C" N; x

  • " j0 s% }6 |, D) h1 K
  • ! o$ N9 I; [2 M! l- j. U

  • 8 H  x, i3 p) y2 g, Q

  • ; ~. j# p1 y# e% m' V8 x( a
  • : i% a$ z  B& r; ~3 O% O5 q

  • $ }7 z& o) L0 O- X; n

  • 7 g( `" |5 k9 W
  • 4 W) M* b4 j7 i) C2 L  f# y

  • ( \1 t- D& k! T0 f( o

  • # Q4 H6 ]# Y% T5 \: F+ _" X
  • , ]9 t0 r: R& W

  • 5 k. a6 d8 o: D8 I# C% ^9 S

  • + O) ?* w+ Y+ m% \

  • % h* [- N9 ]5 n" j7 e; A

  • % v. k+ R. _) C% q. b
  • 1 V( a' W: D2 ]+ C6 {2 O) D! |
  • : E3 H9 K  S" f; i/ x7 F
  • / r+ G' F; z* h5 c; b& Y* A+ [

  • 1 Z- x' `" Z- D; @# L
  • 1 X+ A, L# h: X% p/ m

  • ! T$ u* ?( o( M
  • * u+ h: s9 p3 ^6 v
  • & @2 z# p# p1 k* F( e( H
  • ) N/ ?/ K) |. n0 y! d6 ?2 ~! g, O+ j
  • + {7 G6 f) A1 j" @" {/ X( P

  • 4 p4 J6 q8 N. p  n- m0 N, _' P$ i

  •   [) t: d( _+ x/ G1 ~, |2 v2 P
    , r2 G8 W. _/ h. l# a

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


5 ^- a! k; \/ z; S
回复

举报 使用道具

相关帖子

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