经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
python面积图之曲线图的填充
来源:jb51  时间:2022/6/20 8:40:35  对本文有异议

用法:

  1. Axes.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)

参数说明:

基础用法

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = [1, 2, 3, 4, 5]
  4. y1 = [1, 4, 9, 16, 25]
  5. y2 = [9, 9, 9, 9, 9]
  6. fig, (ax1, ax2) = plt.subplots(1,2)
  7. ax1.fill_between(x, y1, alpha=.5, linewidth=0)
  8. ax1.set_title('填充x,y1之间')
  9. ax2.fill_between(x, y2, alpha=.5, linewidth=1)
  10. ax2.set_title('填充x,y2之间')
  11. plt.show()

当然这样时没有多大意义的,只是想展示出一个比较明确的填充,类似于区域全部填充颜色

案例

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3.  
  4. np.random.seed(1)
  5. x = np.linspace(0, 8, 16)
  6. y1 = 3 + 4*x/8 + np.random.uniform(0.0, 0.5, len(x))
  7. y2 = 1 + 2*x/8 + np.random.uniform(0.0, 0.5, len(x))
  8. fig, ax = plt.subplots()
  9. ax.fill_between(x, y1, y2, alpha=.5, linewidth=0)
  10. ax.plot(x, (y1 + y2)/2, linewidth=2)
  11.  
  12. ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
  13. ylim=(0, 8), yticks=np.arange(1, 8))
  14. plt.show()

复杂的fille_between(案例来源官网)

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. Nsteps, Nwalkers = 100, 250
  5. t = np.arange(Nsteps)
  6. # an (Nsteps x Nwalkers) array of random walk steps
  7. S1 = 0.004 + 0.02*np.random.randn(Nsteps, Nwalkers)
  8. S2 = 0.002 + 0.01*np.random.randn(Nsteps, Nwalkers)
  9. # an (Nsteps x Nwalkers) array of random walker positions
  10. X1 = S1.cumsum(axis=0)
  11. X2 = S2.cumsum(axis=0)
  12. # Nsteps length arrays empirical means and standard deviations of both
  13. # populations over time
  14. mu1 = X1.mean(axis=1)
  15. sigma1 = X1.std(axis=1)
  16. mu2 = X2.mean(axis=1)
  17. sigma2 = X2.std(axis=1)
  18. # plot it!
  19. fig, ax = plt.subplots(1)
  20. ax.plot(t, mu1, lw=2, label='mean population 1')
  21. ax.plot(t, mu2, lw=2, label='mean population 2')
  22. ax.fill_between(t, mu1+sigma1, mu1-sigma1, facecolor='C0', alpha=0.4)
  23. ax.fill_between(t, mu2+sigma2, mu2-sigma2, facecolor='C1', alpha=0.4)
  24. ax.set_title(r'random walkers empirical $\mu$ and $\pm \sigma$ interval')
  25. ax.legend(loc='upper left')
  26. ax.set_xlabel('num steps')
  27. ax.set_ylabel('position')
  28. ax.grid()

where和interpolate

where

定义从何处排除要填充的某些水平区域。填充区域由坐标x[其中]定义。更准确地说,如果其中[i]和其中[i+1],则在x[i]和x[i+1]之间填充。请注意,此定义意味着where中两个假值之间的孤立真值不会导致填充。由于相邻的假值,真实位置的两侧仍保持未填充状态。

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. fig, ax = plt.subplots()
  5. x = np.arange(0, 4 * np.pi, 0.01)
  6. y = np.sin(x)
  7. ax.plot(x, y, color='black')
  8. ax.fill_between(x, y, 0, where=(x>4)&(x<5),color='cyan', alpha=0.5)
  9. plt.show()

interpolate

在语义上,where通常用于y1>y2或类似的词。默认情况下,定义填充区域的多边形节点将仅放置在x阵列中的位置。这样的多边形无法描述上述靠近交点的语义。包含交叉点的x截面仅被剪裁。
将“插值”设置为True将计算实际交点,并将填充区域延伸到此点。

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. x = np.array([0, 1, 2, 3])
  5. y1 = np.array([0.8, 0.8, 0.2, 0.2])
  6. y2 = np.array([0, 0, 1, 1])
  7.  
  8. fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
  9. ax1.set_title('interpolation=False')
  10. ax1.plot(x, y1, 'o--')
  11. ax1.plot(x, y2, 'o--')
  12. ax1.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3)
  13. ax1.fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3)
  14. ax2.set_title('interpolation=True')
  15. ax2.plot(x, y1, 'o--')
  16. ax2.plot(x, y2, 'o--')
  17. ax2.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3,
  18. interpolate=True)
  19. ax2.fill_between(x, y1, y2, where=(y1 <= y2), color='C1', alpha=0.3, interpolate=True)
  20. fig.tight_layout()

step

包含参数为三个{‘pre’,‘post’,‘mid’}
如果填充应为阶跃函数,即x之间的常数,则定义阶跃。该值确定阶跃发生的位置:

  • “pre”:y值从每个x位置持续向左,即间隔(x[i-1],x[i]]的值为y[i]。
  • “post”:y值从每个x位置持续向右,即区间[x[i],x[i+1])的值为y[i]。
  • “mid”:步数出现在x位置的中间。
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. a = np.linspace(0,2*3.14,50)
  5. b = np.sin(a)
  6. plt.figsize=((12,6))
  7. plt.subplot(131)
  8. plt.fill_between(a, b, 0, where = (a > 2) & (a < 5), color = 'green', step='pre')
  9. plt.plot(a,b)
  10. plt.title('step=pre')
  11.  
  12. plt.subplot(132)
  13. plt.fill_between(a, b, 0, where = (a > 2) & (a < 5), color = 'cyan', step='post')
  14. plt.plot(a,b)
  15. plt.title('step=post')
  16.  
  17. plt.subplot(133)
  18. plt.fill_between(a, b, 0, where = (a > 2) & (a < 5), color = 'red', step='mid')
  19. plt.plot(a,b)
  20. plt.title('step=mid')
  21. plt.show()

偏移会有点不一样,因为函数的缘故,偏移不太明显

到此这篇关于python面积图之曲线图的填充的文章就介绍到这了,更多相关python曲线填充内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号