Какой лучший способ объединить pandas.datframe.plot () с matplotlib.pyplot.plot ()? - PullRequest
1 голос
/ 25 сентября 2019

Я пытался отформатировать тики в моей оси 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

1 Ответ

1 голос
/ 25 сентября 2019

Я думаю, что вы путаетесь, когда вы делаете:

ax=df.plot()

, вы уже сделали объект топора.если вы хотите добавить к нему больше (например, другой сюжет), вы можете просто использовать его методы, например:

ax.plot([0,100],[0,0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...