Seaborn relplots создает дублированные топоры - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать два сюжета - один под другим с Морским Рогом!
Мой код:

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True, figsize=(22,8))
p1 = sns.relplot(x="sns_codes", y="triad_quantity", hue="label", data=data_2, kind="line", ax=ax1)
p2 = sns.relplot(x="sns_codes", y="triad_quantity", hue="label", data=data_2, kind="line", ax=ax2)

Но это создает 4 оси вместо 2! Посмотрите:

enter image description here

Я перестаю читать эти дополнительные 2 оси - нужна помощь.
Вот код для создания данных:

df ={'label': {0: 'top_5',
  1: 'first_page',
  2: 'win_ratecard',
  4: 'switched_off',
  5: 'top_5',
  6: 'first_page',
  7: 'win_ratecard',
  9: 'switched_off',
  10: 'top_5',
  11: 'first_page'},
 'report_date': {0: Timestamp('2018-08-21 00:00:00'),
  1: Timestamp('2018-08-21 00:00:00'),
  2: Timestamp('2018-08-21 00:00:00'),
  4: Timestamp('2018-08-22 00:00:00'),
  5: Timestamp('2018-08-22 00:00:00'),
  6: Timestamp('2018-08-22 00:00:00'),
  7: Timestamp('2018-08-22 00:00:00'),
  9: Timestamp('2018-08-23 00:00:00'),
  10: Timestamp('2018-08-23 00:00:00'),
  11: Timestamp('2018-08-23 00:00:00')},
 'sns_codes': {0: 0, 1: 0, 2: 0, 4: 1, 5: 1, 6: 1, 7: 1, 9: 2, 10: 2, 11: 2},
 'triad_quantity': {0: 9,
  1: 204,
  2: 214,
  4: 20,
  5: 5,
  6: 191,
  7: 230,
  9: 21,
  10: 2,
  11: 98}}
 data_2 = pd.DataFrame(df)

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

relplot - это функция на уровне фигуры , поэтому она создаст фигуру. Если вы хотите поместить свои линейные графики в существующие оси matplotlib, не создавая посторонних фигур, используйте функцию линейного графика seaborn, которая является функцией уровень осей :

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True, figsize=(22,8))
p1 = sns.lineplot(x="sns_codes", y="triad_quantity", hue="label", data=data_2, kind="line", ax=ax1)
p2 = sns.lineplot(x="sns_codes", y="triad_quantity", hue="label", data=data_2, kind="line", ax=ax2)

Два графика, которые вы дали в качестве примера, похоже, делают одно и то же, но если вы пытаетесь создать несколько графиков, которые различаются по некоторому измерению, представленному в виде столбца в вашем фрейме данных, вам не нужно укажите субплоты самостоятельно. Вы можете использовать seaborn, чтобы сделать это, используя sns.replot, с параметром строки (facet), указывающим row="a_column_on_which_your_plots_vary". См. учебник по морскому морю для иллюстрации.

0 голосов
/ 28 августа 2018

Ниже приведено возможное решение избавиться от лишних ненужных пустых участков. Проблема заключалась в том, что при вызове sns.relplot, relplot возвращает class:FacetGrid object. Это можно увидеть здесь . Но так как вы передаете ax1 и ax2 для построения графика, эти FacetGrids, которым назначены переменные p1 и p2, отображаются как пустые графики. Чтобы избавиться от них, просто добавьте следующие строки

plt.close(p1.fig)
plt.close(p2.fig) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...