我正在用错误条绘制一些实验的结果。我希望能够在结果具有非常有趣的极端异常值的情况下设置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限制?
谢谢!
答案 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
。这适用于许多其他属性,例如标题,标签等。