AttributeError:'ErrorbarContainer'对象没有属性'set_ylim'

时间:2016-08-31 23:32:10

标签: python matplotlib

我正在用错误条绘制一些实验的结果。我希望能够在结果具有非常有趣的极端异常值的情况下设置y限制。这段代码:

axes = plt.errorbar(feature_data[feature_data.num_unique[feature_of_interest] > 1].index, chi_square_y, yerr=chi_square_y_error, fmt = 'o')
axes.set_ylim([-.2, .2])
plt.plot((min(feature_data[feature_data.num_unique[feature_of_interest] > 1].index), max(feature_data[feature_data.num_unique[feature_of_interest] > 1].index)), (0, 0), 'r--', linewidth = 2)

产生此错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-79-794286dd3c29> in <module>()
     18 rcParams['figure.figsize'] = 10, 5
     19 axes = plt.errorbar(feature_data[feature_data.num_unique[feature_of_interest] > 1].index, chi_square_y, yerr=chi_square_y_error, fmt = 'o')
---> 20 axes.set_ylim([-.2, .2])
     21 plt.plot((min(feature_data[feature_data.num_unique[feature_of_interest] > 1].index), max(feature_data[feature_data.num_unique[feature_of_interest] > 1].index)), (0, 0), 'r--', linewidth = 2)

AttributeError: 'ErrorbarContainer' object has no attribute 'set_ylim'

如何设置y限制?

谢谢!

2 个答案:

答案 0 :(得分:5)

只需使用matplotlib.pyplot.ylim()功能。

您的示例不是自包含的,因此我无法检查以下代码是否确实有效,但至少会修复上述错误:

plt.errorbar(feature_data[feature_data.num_unique[feature_of_interest] > 1].index, chi_square_y, yerr=chi_square_y_error, fmt = 'o')
plt.ylim(-.2, .2)
plt.plot((min(feature_data[feature_data.num_unique[feature_of_interest] > 1].index), max(feature_data[feature_data.num_unique[feature_of_interest] > 1].index)), (0, 0), 'r--', linewidth = 2)

答案 1 :(得分:2)

由于这是一个赏金问题,我将在这里尝试更多细节。

plt.errorbar不返回Axes对象(具有set_ylim方法),而是返回(plotline, caplines, barlinecols)的集合。我怀疑你可能期望Axes对象,因为这是pandas.DataFrame.plot返回的。

直接使用matplotlib的pyplot时,您有两种选择:

选项1 - 直接使用pyplot,而不处理轴:

plt.errorbar( ... )
plt.ylim([-.2, .2])

使用plt会将属性设置为所选的最后一个子图(默认情况下只有一个)。处理单个数字时,您可能更喜欢这种方法。

选项2 - 从subplots获取轴对象:

fig, ax = plt.subplots(1, 1, figsize=(10, 5))
ax.errorbar( ... )
ax.set_ylim([-.2, .2])

这可能是首选方法,部分原因是它允许设置数字大小而不在rcParams中全局设置。它还有一些其他优点,我不会进入这里。

请注意,在使用plt时,该方法为ylim,并且在使用Axes对象时set_ylim。这适用于许多其他属性,例如标题,标签等。