Seaborn готовит легенды при составлении нескольких сюжетов в одном и том же сценарии - PullRequest
0 голосов
/ 07 января 2020

Я новичок в Сиборне. При построении нескольких графиков в одном и том же сценарии первый график корректен, но в остальном добавлены легенды, которые перекосят графики.

Мой код

sns.set()
cmap = sns.cubehelix_palette(rot=-.2, as_cmap=True)
ax = sns.scatterplot(x="Clicks", y="Impressions",
                     hue="Language2", size="CTR",
                     palette=cmap, sizes=(10, 200),
                     data=df)
ax.get_figure().savefig('Test plot.png')

sns.set()
cmap = sns.cubehelix_palette(rot=-.2, as_cmap=True)
ax0 = sns.scatterplot(x="Impressions", y="Clicks",
                      hue="Word2", size="Transactions",
                      palette=cmap, sizes=(10, 200),
                      data=df)
ax0.get_figure().savefig('Test plot 2.png')

sns.set()
cmap = sns.cubehelix_palette(rot=-.2, as_cmap=True)
ax1 = sns.scatterplot(x="CTR", y="CostPerTransaction",
                      hue="Language2", size="Transactions",
                      palette=cmap, sizes=(10, 200),
                      data=df)
ax1.get_figure().savefig('Test plot 3.png')

Я не уверен, должен ли я использовать sns.set() каждый раз. Я переименовал каждый топор, но проблема сохраняется.

Plot one

Plot two

Также возможно Вы могли бы предложить, как я мог улучшить свои заговоры.

Спасибо за ваши предложения.

1 Ответ

1 голос
/ 07 января 2020

Я не уверен, решит ли это вашу проблему. Но в целом у меня есть сильное предпочтение использовать явный объектно-ориентированный подход всякий раз, когда создается более одного графика в matplotlib / seaborn (matplotlib является базовой библиотекой, seaborn просто оборачивает ее, чтобы ускорить работу определенных приложений). Это значит избавиться от ax.get_figure().savefig частей. Я нашел этот учебник действительно полезным для понимания объектно-ориентированного подхода matplotlib по сравнению с подходом неявного состояния.

Ваш код в этом методе будет выглядеть следующим образом:

import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
cmap = sns.cubehelix_palette(rot=-.2, as_cmap=True)
fig1, ax1 = plt.subplots()
sns.scatterplot(x="Clicks", y="Impressions",
                     hue="Language2", size="CTR",
                     palette=cmap, sizes=(10, 200),
                     data=df,
                     ax=ax1)
# This may help with your axes labels spilling off the figure:
fig1.tight_layout()
fig1.savefig('Test plot.png')


#  the sns.set is not needed each time
fig2, ax2 = plt.subplots()
# cmap is the same, so we don't need to define that again
sns.scatterplot(x="Impressions", y="Clicks",
                      hue="Word2", size="Transactions",
                      palette=cmap, sizes=(10, 200),
                      data=df,
                      ax=ax2)
fig2.savefig('Test plot 2.png')

fig3, ax3 = plt.subplots()
sns.scatterplot(x="CTR", y="CostPerTransaction",
                      hue="Language2", size="Transactions",
                      palette=cmap, sizes=(10, 200),
                      data=df,
                      ax=ax3)
fig3.savefig('Test plot 3.png')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...