Как мне получить все морские участки в выходной png? - PullRequest
0 голосов
/ 05 мая 2019

Я хочу построить все столбцы в моем фрейме данных относительно одного столбца в одном и том же df: totCost. Следующий код работает нормально:

for i in range(0, len(df.columns), 5):
    g=sns.pairplot(data=df,
            x_vars=df.columns[i:i+5],
            y_vars=['totCost'])
    g.set(xticklabels=[])
    g.savefig('output.png')

Проблема в файле output.png, содержащем только последние 3 графика (всего их 18). То же самое произойдет, если я определю эту линию. Как мне написать все 18 как один рисунок?

1 Ответ

1 голос
/ 05 мая 2019

Итак, проблема с использованием парного графика, как вы делаете, заключается в том, что на каждой итерации цикла создается новая фигура и присваивается g.

Если вы берете свою последнюю строку кода g.savefig('output.png'), вне цикла, на диск сохраняется только последняя версия g, и это та, в которой есть только три последних подзаговора.

Если вы поместите эту строку в петлю, все фигуры будут сохранены на диск, но под тем же именем, а последняя, ​​конечно, снова будет цифрой с тремя подзаговорами в ней.

Способ обойти это - создать фигуру и назначить ей все вспомогательные участки по мере их появления, а затем сохранить эту фигуру на диске:

import matplotlib.pyplot as plt

import pandas as pd
import numpy as np
import seaborn as sns

# generate random data, with 18 columns
dic = {str(a): np.random.randint(0,10,10) for a in range(18)}
df = pd.DataFrame(dic)

# rename first column of dataframe
df.rename(columns={'0':'totCost'}, inplace=True)

#instantiate figure
fig = plt.figure()

# loop through all columns, create subplots in 5 by 5 grid along the way,
# and add them to the figure
for i in range(len(df.columns)):
    ax = fig.add_subplot(5,5,i+1)
    ax.scatter(df['totCost'], df[df.columns[i]])
    ax.set_xticklabels([])

plt.tight_layout()

fig.savefig('figurename.png')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...