Как перебирать элементы оси в серии вложенных графиков?

#python #pandas #loops #seaborn

#python #pandas #циклы #сиборн

Вопрос:

У меня есть серия вложенных графиков, созданных с использованием sns.FacetGrid и сопоставление с sns.scatterplot . Он генерирует 13 вложенных графиков. Часть построения графика работает отлично и ее не нужно менять.

Я стремлюсь добавить диагональную линию к каждому подзаголовку.

Лучший метод, который я нашел до сих пор, использует следующее:

 h = sns.FacetGrid(df, hue="category", col="category_2", col_wrap=3)
h.map(sns.scatterplot, "x", "y", s=75, alpha=0.4)

# get axes
ax1, ax2, ax3, ax4, ax5, ax6, ax7, ax8, ax9, ax10, ax11, ax12, ax13 = h.axes

ax1.plot([-1, 6], [-1, 6], transform=ax1.transAxes, ls="--", c="k")
ax2.plot([-1, 6], [-1, 6], transform=ax2.transAxes, ls="--", c="k")
... 
ax13.plot([-1, 6], [-1, 6], transform=ax2.transAxes, ls="--", c="k")
 

Это очень простой вопрос… каков наилучший способ перебора каждого ax.plot, чтобы мне не приходилось копировать и вставлять эту строку 13 раз?

Приведенные ниже методы не работают, потому что в первом случае axi не определен, а во втором f-строка делает его строковым объектом, который не может отображать.

 for i in range(1,14):
    axi.plot([-1, 6], [-1, 6], transform=axi.transAxes, ls="--", c="k")
 

и

 for i in range(1,14):
   ax = f"ax{i}"
   ax.plot([-1, 6], [-1, 6], transform=axi.transAxes, ls="--", c="k")
 

Ответ №1:

Вы можете использовать map.axes.flat функциональность:

 for ax in h.axes.flat:
    ax.axline((0, 0), slope=.2, c=".2", ls="--", zorder=0)
 

И параметры для axline можно найти здесь

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

1. большое вам спасибо, это ГОРАЗДО лучшая реализация.