【问题标题】:Can't pass pandas Series to pyplot's fill_between function?不能将 pandas Series 传递给 pyplot 的 fill_between 函数?
【发布时间】:2013-07-28 16:09:03
【问题描述】:
将熊猫系列传递给 pyplot 的 fill_between() 函数会产生以下错误:
<type 'exceptions.KeyError'> -1
但是,其他 pyplot 函数似乎可以将 Series 作为输入(plot() 和 scatter() 似乎可以正常工作)。我知道这个问题可以通过传递 my_series.value 而不是 my_series 来解决,但是有人可以解释为什么某些 pyplot 绘图函数似乎可以将 Series 作为输入,而其他函数则不行?给定 Series 时哪些函数会崩溃?谢谢。
【问题讨论】:
标签:
python
matplotlib
pandas
【解决方案1】:
因为matplotlib 被编写为将序列或np.ndarray-like 对象作为参数(并且对pandas 一无所知)。在内部使用的所有方法在 pandas 对象和 numpy 对象上都相同的情况下,它会起作用(鸭子打字的魔力)。如果pandas 对象的行为不正确(在这种情况下使用v[-1] 来取出第一个维度的最后一个元素),则会引发错误。
如果给定函数与pandas 对象一起使用取决于函数的内部结构,并且即使在mpl 的次要版本之间也不能保证稳定,因为您实际上是以一种未记录的方式使用matplotlib。
【解决方案2】:
直到pandas在plt.fill_between函数中没有正式实现,你仍然可以应用pd.Series或pd.DataFrame作为pd.Series().values和pd.DataFrame().values来制作fill_between绘图。