Enregistrez les tracés dans un PDF

90

module de traçage

def plotGraph(X,Y):
    fignum = random.randint(0,sys.maxint)
    plt.figure(fignum)
    ### Plotting arrangements ###
    return fignum

module principal

import matplotlib.pyplot as plt
### tempDLStats, tempDLlabels are the argument
plot1 = plotGraph(tempDLstats, tempDLlabels)
plot2 = plotGraph(tempDLstats_1, tempDLlabels_1)
plot3 = plotGraph(tempDLstats_2, tempDLlabels_2)
plt.show()

Je veux enregistrer tous les graphiques plot1, plot2, plot3 dans un seul fichier PDF. Y a-t-il un moyen d'y parvenir? Je ne peux pas inclure la plotGraphfonction dans le module principal.

Il existe une fonction nommée pylab.savefigmais qui ne semble fonctionner que si elle est placée avec le module de traçage. Y a-t-il un autre moyen de l'accomplir?

VaudouEnfant92
la source

Réponses:

208

Si quelqu'un finit ici depuis Google, cherchant à convertir un seul chiffre en .pdf (c'était ce que je cherchais):

import matplotlib.pyplot as plt

f = plt.figure()
plt.plot(range(10), range(10), "o")
plt.show()

f.savefig("foo.pdf", bbox_inches='tight')
Clément T.
la source
1
Comment définissez-vous la taille de page du pdf?
wherestheforce
2
@wherestheforce Je ne suis pas sûr que vous puissiez définir la taille de page du pdf directement mais vous pouvez changer la taille de la figure: f = plt.figure (figsize = (5, 10)) par exemple, pour changer le ratio pdf.
Clement T.14
119

Pour plusieurs parcelles dans un seul fichier pdf, vous pouvez utiliser PdfPages

Dans la plotGraphfonction, vous devez renvoyer la figure et l'appel savefigde l'objet figure.

------ module de traçage ------

def plotGraph(X,Y):
      fig = plt.figure()
      ### Plotting arrangements ###
      return fig

------ module de traçage ------

----- mainModule ----

from matplotlib.backends.backend_pdf import PdfPages

plot1 = plotGraph(tempDLstats, tempDLlabels)
plot2 = plotGraph(tempDLstats_1, tempDLlabels_1)
plot3 = plotGraph(tempDLstats_2, tempDLlabels_2)

pp = PdfPages('foo.pdf')
pp.savefig(plot1)
pp.savefig(plot2)
pp.savefig(plot3)
pp.close()
Arjenve
la source
3
"Plotting Arrangements" mérite un exemple pour expliquer comment ajouter réellement des tracés aux figures!
user2127595
1
@ user2127595 Cela fonctionne pour moi: def plot_graph (x, y1, y2): fig = plt.figure () axes1 = fig.add_subplot (2, 1, 1) axes2 = fig.add_subplot (2, 1, 2) axes1. plot (x, y1) axes2.plot (x, y2) return fig
DeanM
22
import datetime
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt

# Create the PdfPages object to which we will save the pages:
# The with statement makes sure that the PdfPages object is closed properly at
# the end of the block, even if an Exception occurs.
with PdfPages('multipage_pdf.pdf') as pdf:
    plt.figure(figsize=(3, 3))
    plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o')
    plt.title('Page One')
    pdf.savefig()  # saves the current figure into a pdf page
    plt.close()

    plt.rc('text', usetex=True)
    plt.figure(figsize=(8, 6))
    x = np.arange(0, 5, 0.1)
    plt.plot(x, np.sin(x), 'b-')
    plt.title('Page Two')
    pdf.savefig()
    plt.close()

    plt.rc('text', usetex=False)
    fig = plt.figure(figsize=(4, 5))
    plt.plot(x, x*x, 'ko')
    plt.title('Page Three')
    pdf.savefig(fig)  # or you can pass a Figure object to pdf.savefig
    plt.close()

    # We can also set the file's metadata via the PdfPages object:
    d = pdf.infodict()
    d['Title'] = 'Multipage PDF Example'
    d['Author'] = u'Jouni K. Sepp\xe4nen'
    d['Subject'] = 'How to create a multipage pdf file and set its metadata'
    d['Keywords'] = 'PdfPages multipage keywords author title subject'
    d['CreationDate'] = datetime.datetime(2009, 11, 13)
    d['ModDate'] = datetime.datetime.today()
Victor Juliet
la source
3
Si vous utilisez, plt.show()mettez-le après pdf.savefig().
de keras import michael
-23

Peu importe comment le faire.

def plotGraph(X,Y):
     fignum = random.randint(0,sys.maxint)
     fig = plt.figure(fignum)
     ### Plotting arrangements ###
     return fig

------ module de traçage ------

----- mainModule ----

 import matplotlib.pyplot as plt
 ### tempDLStats, tempDLlabels are the argument
 plot1 = plotGraph(tempDLstats, tempDLlabels)
 plot2 = plotGraph(tempDLstats_1, tempDLlabels_1)
 plot3 = plotGraph(tempDLstats_2, tempDLlabels_2)
 plt.show()
 plot1.savefig('plot1.png')
 plot2.savefig('plot2.png')
 plot3.savefig('plot3.png')

----- mainModule -----

VaudouEnfant92
la source
19
Attendez, je pensais que vous vouliez enregistrer les graphiques dans un seul fichier PDF. Votre solution enregistre les images dans trois fichiers PNG distincts, ce qui semble être la réponse à une question différente.
DSM
2
Extremement Désolé. Je me concentrais davantage sur la sauvegarde du fichier. Je connaissais le truc du pdf backend ... mais j'ai continué mon travail et j'ai négligé de l'ajouter. Quoi qu'il en soit, merci de l'avoir signalé.
VoodooChild92
5
Vu le nombre de votes négatifs, vous pouvez penser à supprimer cette réponse pour laisser «de la place» pour les autres réponses.
PatrickT