#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. большое вам спасибо, это ГОРАЗДО лучшая реализация.