Автоматически создавать новую фигуру для графиков matplotlib - PullRequest
0 голосов
/ 09 июля 2020

Я использую matplotlib и seaborn для создания своих графиков в файле PDF, который собирает все открытые фигуры.

В упрощенном виде мой код выглядит следующим образом:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages


# create random dataframe
df = pd.DataFrame(np.random.rand(30, 4), columns=['A', 'B', 'C', 'D'])

# create plots
ax1 = sns.lineplot(data=df.loc[:, ['A']], color='r')
ax2 = ax1.twinx()
ax2 = sns.lineplot(data=df.loc[:, ['B']], color='b', ax=ax2)

# this works in order to separate the plots into different figures
# but I do not want to call plt.figure() before every plot
#plt.figure()
ax3 = sns.scatterplot(data=df, x='C', y='D')

# create pdf file with plots
pp = PdfPages('plots.pdf')

figs = [plt.figure(n) for n in plt.get_fignums()]
for fig in figs:
    fig.savefig(pp, format='pdf')
pp.close()

# close all existing figures
for fig in figs:
    plt.close(fig)

Но это Таким образом, рисунки помещены на одну страницу в файле PDF, потому что они принадлежат к одному рисунку:

введите описание изображения здесь

Я могу создать новую фигуру вручную для каждого графика, используя plt.figure().

Но как я могу автоматически создавать графики на новом рисунке или, по крайней мере, помещать все графики на разные фигуры при создании файла PDF?

Заранее спасибо!

1 Ответ

0 голосов
/ 09 июля 2020

здесь вы сохраняете все рисунки в один и тот же PDF-файл:

pp = PdfPages('plots.pdf')
[...]
for fig in figs:
    fig.savefig(pp, format='pdf')

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

...