【问题标题】:Filling region between curve and x-axis in Python using Matplotlib使用 Matplotlib 在 Python 中填充曲线和 x 轴之间的区域
【发布时间】:2013-11-23 17:54:23
【问题描述】:

我正在尝试使用 MatPlotLib 在 Python 中简单地填充绘图曲线下的区域。

这是我的 SSCCE:

import json
import pprint
import numpy as np
import matplotlib.pyplot as plt

y = [0,0,0,0,0,0,0,0,0,0,0,863,969,978,957,764,767,1009,1895,980,791]
x = np.arange(len(y))


fig2, ax2 = plt.subplots()
ax2.fill(x, y)

plt.savefig('picForWeb.png')
plt.show()

附图显示了产生的输出。

有谁知道为什么 Python 没有填充 x 轴和曲线之间的整个区域?

我已经进行了 Google 和 StackOverflow 搜索,但找不到类似的示例。直觉上它似乎应该填满曲线下的整个区域。

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    我通常使用 fill_between 函数来绘制这些类型的图。试试这样的:

    import numpy as np
    import matplotlib.pyplot as plt
    
    y = [0,0,0,0,0,0,0,0,0,0,0,863,969,978,957,764,767,1009,1895,980,791]
    x = np.arange(len(y))
    
    fig, (ax1) = plt.subplots(1,1); 
    ax1.fill_between(x, 0, y)
    plt.show()
    

    查看更多示例here

    【讨论】:

    • 您的示例完美运行。我仍然不清楚为什么 fill 函数会出现附图中的行为,但是如果 fill_between 有效,它就有效!
    【解决方案2】:

    如果你想在 pd.DataFrame 上使用这个,请使用这个:

    df.abs().interpolate().plot.area(grid=1, linewidth=0.5)
    

    interpolate() 是可选的。

    【讨论】:

      【解决方案3】:

      plt.fill 假设您有一个封闭的形状要填充 - 有趣的是,如果您在数据中添加最后一个 0,您会得到一个看起来更合理的图。

      import numpy as np
      import matplotlib.pyplot as plt
      
      y = [0,0,0,0,0,0,0,0,0,0,0,863,969,978,957,764,767,1009,1895,980,791,0]
      x = np.arange(len(y))
      
      
      fig2, ax2 = plt.subplots()
      ax2.fill(x, y)
      
      plt.savefig('picForWeb.png')
      plt.show()
      

      结果:

      希望这有助于解释你的奇怪情节。

      【讨论】:

      • 我现在明白了,这是有道理的。所以“填充功能”用于填充封闭多边形内的区域。另一方面,“fill_between”函数用于曲线之间的区域。谢谢解释
      • 我很好奇如果没有比创建额外的列表更简单的方法来做到这一点,这些列表必须是数据的长度。这个功能的需求量很大。