Speichern Sie die Diagramme in einem PDF

88

Plotmodul

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

Hauptmodul

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()

Ich möchte alle Diagramme plot1, plot2, plot3 in einer einzigen PDF-Datei speichern. Gibt es eine Möglichkeit, dies zu erreichen? Ich kann die plotGraphFunktion nicht in das Hauptmodul aufnehmen.

Es gibt eine Funktion namens pylab.savefig, die jedoch nur zu funktionieren scheint, wenn sie zusammen mit dem Plotmodul platziert wird. Gibt es eine andere Möglichkeit, dies zu erreichen?

VoodooChild92
quelle

Antworten:

199

Wenn jemand von Google hier landet und versucht, eine einzelne Figur in eine PDF-Datei umzuwandeln (das war es, wonach ich gesucht habe):

import matplotlib.pyplot as plt

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

f.savefig("foo.pdf", bbox_inches='tight')
Clement T.
quelle
1
Wie stellen Sie die Seitengröße des PDF ein?
Kraft
2
@wherestheforce Ich bin nicht sicher, ob Sie die Seitengröße des PDFs direkt einstellen können, aber Sie können die Abbildungsgröße ändern: f = plt.figure (figsize = (5, 10)), um beispielsweise das PDF-Verhältnis zu ändern.
Clement T.
116

Für mehrere Diagramme in einer einzelnen PDF-Datei können Sie PdfPages verwenden

In der plotGraphFunktion sollten Sie die Figur zurückgeben und dann das Figurenobjekt aufrufen savefig.

------ Plotmodul ------

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

------ Plotmodul ------

----- 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
quelle
3
"Plot-Arrangements" verdient ein Beispiel, um zu erklären, wie man Plots tatsächlich zu Figuren hinzufügt!
user2127595
1
@ user2127595 Das funktioniert bei mir: def plot_graph (x, y1, y2): fig = plt.figure () Achsen1 = fig.add_subplot (2, 1, 1) Achsen2 = fig.add_subplot (2, 1, 2) Achsen1. plot (x, y1) axis2.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
quelle
3
Wenn Sie verwenden, plt.show()setzen Sie es nach pdf.savefig().
Von Keras Import Michael
-23

Egal, wie es geht.

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

------ Plotmodul ------

----- 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 -----

VoodooChild92
quelle
19
Warten Sie, ich dachte, Sie möchten die Diagramme in einer einzigen PDF-Datei speichern. Ihre Lösung speichert die Bilder in drei separaten PNG-Dateien, was die Antwort auf eine andere Frage zu sein scheint.
DSM
2
Sehr leid. Ich habe mich mehr darauf konzentriert, die Datei irgendwie zu speichern. Ich wusste über das Backend-PDF Bescheid ... aber ich machte mit meiner Arbeit weiter und versäumte es, sie hinzuzufügen. Wie auch immer, danke für den Hinweis.
VoodooChild92
5
Wenn Sie die Anzahl der Abstimmungen sehen, können Sie diese Antwort löschen, um "Raum" für die anderen Antworten zu lassen.
PatrickT