Creé un programa que genera una gran cantidad de gráficos usando seaborn catplot. Este es el ejemplo de mi código con la ilustración de cómo se ve el gráfico final.

plot= sns.catplot(data=df3, x="solutions", y="score", col="subject", col_wrap=3, hue="Value",height=3, aspect=1.5,legend=False, sharex=False, sharey=False)
plt.legend(loc='upper left')
plot.set_xticklabels(rotation=90)
plt.tight_layout()

#Create output
plot.savefig("output3.pdf")

Image taken from https://seaborn.pydata.org/tutorial/axis_grids.html

Sin embargo, dado que la trama puede extenderse hasta más de 300 tramas, cuando intenté exportar a pdf, el tamaño del gráfico es demasiado grande y gran parte de la trama se recorta. Noto que solo hay 1 páginas para esta salida en pdf. ¿Hay alguna forma de crear varias páginas para esta salida?

Editar:

Como lo sugieren los comentarios, estoy tratando de usar PdfPages

import matplotlib.backends.backend_pdf
pdf = matplotlib.backends.backend_pdf.PdfPages("output.pdf")
for fig in range(1, plt.gcf().number + 1):
    plot= sns.catplot(data=df3, x="solutions", y="score", col="subject", col_wrap=3, hue="Value",height=3, aspect=1.5,legend=False, sharex=False, sharey=False)
    plt.legend(loc='upper left')
    plot.set_xticklabels(rotation=90)
    plt.tight_layout()
    
    pdf.savefig( fig )
pdf.close()

Pero devuelve un mensaje de error:

<Figure size 432x288 with 0 Axes>

Y devuélvalo con documento pdf con páginas en blanco adentro. Por favor, ayúdame, ya que es posible que no sepa qué parte lo hice mal.

0
choco 20 ene. 2021 a las 11:46

1 respuesta

La mejor respuesta

Creo que tendrá que dividir su trama en varias cifras para usar la respuesta proporcionada por @ r-beginners

Si usa catplot(), puede usar col_order= para especificar qué tema mostrar. Puede recorrer un fragmento de subjects con itertools .

Algo como esto:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    from itertools import zip_longest
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

import matplotlib.backends.backend_pdf
pdf = matplotlib.backends.backend_pdf.PdfPages("output.pdf")

N_plots_per_page = 9
for cols in grouper(data['subject'].unique(), N_plots_per_page):
    g = sns.catplot(data=data, x='solution', y='score', col='subject', col_wrap=3, kind='point', col_order=cols)
    pdf.savefig(g.fig)
pdf.close()
2
Diziet Asahi 20 ene. 2021 a las 10:00