Я пытался отформатировать тики в моей оси y (этот поток Форматировать ось y как процент - это здорово), но многие решения вызывали ошибку AttributeError для моего конкретного кода
#Example code
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# arbitary data to plot
df = pd.DataFrame(np.random.randn(100,2))
#plotting the data and then plotting a 0 line over the top
ax = df.plot()
ax = plt.plot([0,100],[0,0])
vals = ax.get_yticks()
ax.set_yticklabels(['{:,.2%}'.format(x) for x in vals])
plt.show()
Небольшое тестирование показало, что второй вызов plot испортил объект ax, из которого он был: класс 'matplotlib.axes._subplots.AxesSubplot' в класс 'list'.Таким образом, это было легко обойти, не приписывая второй сюжет топору:
ax = df.plot()
plt.plot([0,100],[0,0])
Или переместите строку форматирования вверх в коде до того, как объект ax будет изменен:
ax = df.plot()
vals = ax.get_yticks()
ax.set_yticklabels(['{:,.2%}'.format(x) for x in vals])
ax = plt.plot([0,100],[0,0])
Итак, мой вопрос: какова лучшая практика?Оба обходных пути кажутся неправильными, каков наилучший способ назначить вызов plt.plot () для объекта ax без его изменения?Или лучше будет использовать plt.plot (df.index, df) вместо df.plot ()?
* Обратите внимание на ответ dp8 в Отформатируйте ось y как процент"plt.gca (). set_yticklabels (['{:. 0f}%'. format (x * 100) для x в plt.gca (). get_yticks ()]) "работал независимо от того, что я сделал с вызовами ax