Grafikleri bir PDF'ye kaydedin


91

çizim modülü

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

ana modül

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

Tüm plot1, plot2, plot3 grafiklerini tek bir PDF dosyasına kaydetmek istiyorum. Bunu başarmanın bir yolu var mı? Ben içeremez plotGraphana modülde işlevi.

Adında bir işlev var pylab.savefigama bu sadece çizim modülüyle birlikte yerleştirildiğinde çalışıyor gibi görünüyor. Bunu başarmanın başka bir yolu var mı?

Yanıtlar:


209

Birisi Google'dan buraya gelirse, tek bir rakamı .pdf'ye dönüştürmek istiyorsa (aradığım buydu):

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
PDF'nin sayfa boyutunu nasıl belirlersiniz?
nerede

2
@wherestheforce pdf'nin sayfa boyutunu doğrudan ayarlayabileceğinizden emin değilim, ancak şekil boyutunu değiştirebilirsiniz: f = plt.figure (figsize = (5, 10)) örneğin, pdf oranını değiştirmek için.
Clement T.

119

Tek bir pdf dosyasında birden çok grafik için PdfPages kullanabilirsiniz

In plotGraphfonksiyonu Eğer şekil ve çağrı daha dönmelidir savefigfigür nesnesinin.

------ çizim modülü ------

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

------ çizim modülü ------

----- ana modül ---

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
"Çizim Düzenlemeleri", şekillere gerçekte grafiklerin nasıl ekleneceğini açıklamak için bir örneği hak ediyor!
user2127595

1
@ user2127595 Bu benim için çalışıyor: 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
Eğer kullanıyorsanız plt.show()sonrasına koyun pdf.savefig().
keras'tan michael ithal

-24

Boşver bunu yapmanın bir yolunu buldum.

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

------ çizim modülü ------

----- ana modül ---

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

----- ana modül -----


19
Bekle, grafikleri tek bir PDF dosyasına kaydetmek istediğini düşündüm. Çözümünüz, görüntüleri üç ayrı PNG dosyasına kaydeder ve bu, farklı bir sorunun cevabı gibi görünür.
DSM

2
Çok üzgünüm. Dosyayı bir şekilde kaydetmeye daha çok güveniyordum. Arka uç pdf konusunu biliyordum .. ama işime devam ettim ve eklemeyi ihmal ettim. Neyse, gösterdiğin için teşekkürler.
VoodooChild92

5
Olumsuz oyların sayısını görünce, diğer cevaplar için "oda" bırakmak için bu cevabı silmeyi düşünebilirsiniz.
PatrickT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.