Как переключить видимость линии с графика фрейма данных?

#python #pandas #dataframe #matplotlib

Вопрос:

У меня есть фрейм данных panda, содержащий около 8 строк, которые необходимо построить. Я хочу иметь четкое представление об этих строках, так как это может привести к беспорядку из-за перехвата такого количества строк. Я видел решение, использующее выбор условных обозначений для переключения видимости линии, но для этого требуется сопоставить линию условных обозначений с фактической линией на графике.

Есть ли способ получить эти строки или любой другой способ переключить их видимость?

Что касается моего кода, то после подготовки фрейма данных я просто строю график:

 df.plot(figsize=(20, 8), fontsize=16)
plt.show()
 

Комментарии:

1. Возможно, вам потребуется предоставить нам эти данные

2. Возможно, вы захотите рассмотреть возможность использования для этого plotly express. Линейные графики автоматически обеспечивают такую интерактивность.

Ответ №1:

Вы df.plot() возвращаете axes.Axes объект, у которого есть .get_lines() метод. Как сказано на жестянке, это возвращает нанесенные линии.

Вот пример, который вы цитируете, переписанный вокруг pd.DataFrame.plot :

 ax = df.plot(figsize=(20, 8), fontsize=16)
ax.set_title('Click on legend line to toggle line on/off')
leg = ax.legend(fancybox=True, shadow=True)

lined = {}  # Will map legend lines to original lines.
for legline, origline in zip(leg.get_lines(), ax.get_lines()):
    legline.set_picker(True)  # Enable picking on the legend line.
    lined[legline] = origline


def on_pick(event):
    # On the pick event, find the original line corresponding to the legend
    # proxy line, and toggle its visibility.
    legline = event.artist
    origline = lined[legline]
    visible = not origline.get_visible()
    origline.set_visible(visible)
    # Change the alpha on the line in the legend so we can see what lines
    # have been toggled.
    legline.set_alpha(1.0 if visible else 0.2)
    ax.get_figure().canvas.draw()

ax.get_figure().canvas.mpl_connect('pick_event', on_pick)
plt.show()
 

Однако я нахожу, что поле щелчка для строк в легенде довольно маленькое, поэтому, возможно, вам нужно будет немного щелкнуть, чтобы узнать, где оно находится (я должен стремиться к верхнему краю строк легенды).