Simpan plot ke dalam PDF


91

modul merencanakan

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

modul utama

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

Saya ingin menyimpan semua grafik plot1, plot2, plot3 ke satu file PDF. Apakah ada cara untuk mencapainya? Saya tidak dapat menyertakan plotGraphfungsi dalam modul utama.

Ada fungsi bernama pylab.savefigtetapi tampaknya hanya berfungsi jika ditempatkan bersama dengan modul plotting. Apakah ada cara lain untuk melakukannya?

Jawaban:


209

Jika seseorang berakhir di sini dari google, ingin mengonversi satu angka menjadi .pdf (itulah yang saya cari):

import matplotlib.pyplot as plt

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

f.savefig("foo.pdf", bbox_inches='tight')

1
Bagaimana Anda mengatur ukuran halaman pdf?
wherestheforce

2
@wherestheforce Saya tidak yakin Anda dapat mengatur ukuran halaman pdf secara langsung tetapi Anda dapat mengubah ukuran gambar: f = plt.figure (figsize = (5, 10)) misalnya, untuk mengubah rasio pdf.
Clement T.

119

Untuk beberapa plot dalam satu file pdf Anda dapat menggunakan PdfPages

Dalam plotGraphfungsi tersebut Anda harus mengembalikan angka dan daripada memanggil savefigobjek angka.

------ modul perencanaan ------

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

------ modul perencanaan ------

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

3
"Pengaturan Plotting" layak mendapatkan contoh untuk menjelaskan cara menambahkan plot ke gambar!
pengguna2127595

1
@ user2127595 Ini bekerja untuk saya: 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()

3
Jika Anda menggunakan plt.show()letakkan setelah pdf.savefig().
dari keras import michael

-24

Tidak masalah punya cara untuk melakukannya.

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

------ modul perencanaan ------

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


19
Tunggu, saya pikir Anda ingin menyimpan plot ke dalam satu file PDF. Solusi Anda menyimpan gambar ke dalam tiga file PNG terpisah, yang sepertinya merupakan jawaban untuk pertanyaan berbeda.
DSM

2
Sangat menyesal. Bagaimanapun, saya lebih berkonsentrasi untuk menyimpan file. Saya tahu tentang hal pdf backend .. tapi melanjutkan pekerjaan saya dan lupa menambahkannya. Bagaimanapun, terima kasih telah menunjukkannya.
VoodooChild92

5
Melihat jumlah suara negatif, Anda mungkin berpikir untuk menghapus jawaban ini agar "ruang" untuk jawaban lainnya.
PatrickT
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.