Решение, которое обрабатывает также отрицательные значения с формированием плавающего образца.
Все еще нуждается в настройках смещения.
df=pd.DataFrame({'A':np.random.rand(2)-1,'B':np.random.rand(2)},index=['val1','val2'] )
ax = df.plot(kind='bar', color=['r','b'])
x_offset = -0.03
y_offset = 0.02
for p in ax.patches:
b = p.get_bbox()
val = "{:+.2f}".format(b.y1 + b.y0)
ax.annotate(val, ((b.x0 + b.x1)/2 + x_offset, b.y1 + y_offset))
Этот вопрос, похоже, подобен этому . В Python 2.7 вызов функции super нуждается в следующих аргументах:
super(OperationWithMul,self).Sub(n1,n2)
И ваш корневой класс должен наследовать от класса объекта:
class Operation(object):
При этом вы определите свой класс как класс нового стиля, который является стандартом для Python 3.0 и имеет ряд преимуществ.
В Python 2.7 вы должны записать его следующим образом:
super(OperationWithMul, self).Sub(n1,n2)
Подробнее см. в документации super()
Python 2.7 .
В Python 2 для использования super
вам нужно использовать классы нового стиля:
class Operation(object): # makes the base-class a new-style class
# your code
class OperationWithMul(Operation):
# your code
# ...
И вам нужно передать текущий класс и экземпляр явно super
:
super(OperationWithMul, self).Sub(n1, n2)
В Python 3 у вас не будет этих проблем, потому что все классы являются новыми, а super
запрашивают необходимые аргументы. Несмотря на то, что это, вероятно, выходит за рамки вопроса, вам стоит подумать о переходе на Python 3.
Также имена методов в Python обычно начинаются с буквы нижнего регистра. Это не жесткое правило, но может сделать ваш код более понятным для других программистов на Python (например, я).