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

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

[复制链接]

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

/ M+ a+ p# n8 @, t6 x! V1 s! J$ N: M, t

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

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

    9 J9 ?2 r5 z% ^( c: W$ i$ E

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


/ S* O& O: c1 \6 ^4 p: o

绘制面积图和填色图

2b2b8cffc67a22fcc69646ca599a3645.png

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

014dfdb505f25bf97af4e4013898632f.png

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

  • + T' T& x: I) ?" d( ~3 X; Y& |

  • 7 z% L0 R$ S! V: s% M- o( a; o
  • $ Y7 z1 y8 v" w2 e/ f; u
  • * y( R$ M: D$ t+ Y9 _- F
  • ' r! B4 Z+ C9 f$ O0 E

  • 3 B2 Q4 Z# `9 `  q0 W
  • ) `# U5 z9 G3 c7 h# X0 k0 l" k5 v% e
  • 2 P. S- N5 a# {9 {9 u# |5 H9 [0 Q
  • $ s( V' o- w7 `# `. a2 Z
  • & W/ T8 b, [# [, ?- G5 m. e

  • * x" c, l3 ?/ F8 l' M" C0 k) t

  • * V# q3 l+ m: T: l

  • . L% x3 E; g  B& M- G
  • ) j6 l- W9 f# t( h( z& y1 t8 {

  • 3 ]8 ^( g" K7 `5 a

  • ( ^0 h: `( g7 B3 B' {4 t+ t- R

  • * d) P% ^; \# O9 \7 d+ p4 g& O
  • " }6 ?# n' n2 j5 r7 o
  • ' g7 j8 t6 V$ \- P% H& Z6 H. I

  • 8 w! O( a7 D5 o# p% R! _

  • ! a( A* k+ y7 N3 T, I2 r0 u/ R

  • 0 |; R2 y+ b+ Q; {6 S! |1 \
  • : |. R( J8 N& U( f5 w( V

  • " i4 O, f! |( E/ q/ @1 G- F- _# [: c

  • 1 d& _$ c; L2 o2 w* u% |
  • ( R6 c) {1 ?  h
  • ; X2 N  U1 l6 C1 q+ C, w9 f) ]3 F1 A
  • 0 J# X' @& u; S
  • 1 ?8 [( ^2 ~* \5 i1 w; P9 T

  • / Z  o8 c' w. r# y+ e( u8 A

  • 9 {5 p! X+ W2 W$ t7 ~: {
  • 8 P2 F4 A7 \2 Q% V

  • 3 _3 D' c" Z2 w# S9 [3 ?0 r

  • 8 p1 R# E, k: O

  • 5 k+ [/ m, U+ ?
  • ( z( l& C4 F0 ]  A; K
  • $ ?1 D, p9 |  \1 S9 Z- ?
  • - F, s) L/ y8 H! ?: ~6 e
  • ; B# B' r/ j' S
  • + Y/ j8 S* W8 B: m8 Q$ Z; @

  • , K$ @0 y$ f6 {

  • 5 j' w2 y4 j/ w& [7 \$ W6 Q
  • ( R  E6 Y* h4 N) g
  • , z0 K: c8 c2 f

    , c3 s& C! Q/ d5 B) J* L

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


: v+ }! p: r- g5 `# i
回复

举报 使用道具

相关帖子

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