Lưu các mảnh đất thành PDF


90

mô-đun âm mưu

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

mô-đun chính

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ôi muốn lưu tất cả các biểu đồ plot1, plot2, plot3 vào một tệp PDF duy nhất. Có cách nào để đạt được nó? Tôi không thể bao gồm plotGraphchức năng trong mô-đun chính.

Có một chức năng được đặt tên pylab.savefignhưng điều đó dường như chỉ hoạt động nếu nó được đặt cùng với mô-đun vẽ đồ thị. Có cách nào khác để hoàn thành nó không?

Câu trả lời:


208

Nếu ai đó kết thúc ở đây từ google, tìm cách chuyển đổi một con số duy nhất thành .pdf (đó là những gì tôi đang tìm kiếm):

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
Làm thế nào để bạn đặt kích thước trang của pdf?
wherestheforce

2
@wherestheforce Tôi không chắc bạn có thể đặt trực tiếp kích thước trang của pdf nhưng bạn có thể thay đổi kích thước hình: ví dụ: f = plt.figure (figsize = (5, 10)) để thay đổi tỷ lệ pdf.
Clement T.

119

Đối với nhiều ô trong một tệp pdf, bạn có thể sử dụng PdfPages

Trong plotGraphhàm, bạn nên trả về hình và lệnh gọi savefigcủa đối tượng hình.

------ mô-đun vẽ đồ thị ------

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

------ mô-đun vẽ đồ thị ------

----- 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
"Sắp xếp âm mưu" xứng đáng là một ví dụ để giải thích cách thực sự thêm âm mưu vào số liệu!
user2127595 13/09/18

1
@ user2127595 Điều này phù hợp với tôi: def plot_graph (x, y1, y2): fig = plt.figure () axis1 = fig.add_subplot (2, 1, 1) axis2 = fig.add_subplot (2, 1, 2) axis1. cốt truyện (x, y1) axes2.plot (x, y2) return vả
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
Nếu bạn đang sử dụng, plt.show()hãy đặt nó sau pdf.savefig().
từ keras nhập michael

-23

Đừng bận tâm có cách để làm điều đó.

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

------ mô-đun vẽ đồ thị ------

----- 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
Chờ đã, tôi nghĩ bạn muốn lưu các mảnh đất thành một tệp PDF. Giải pháp của bạn lưu hình ảnh thành ba tệp PNG riêng biệt, có vẻ như là câu trả lời cho một câu hỏi khác.
DSM

2
Vô cùng xin lỗi. Tôi đã nghĩ nhiều hơn về việc lưu tệp bằng cách nào đó. Tôi biết về thứ pdf phụ trợ..nhưng vẫn tiếp tục với công việc của mình và bỏ bê việc thêm nó. Dù sao, cảm ơn vì đã chỉ ra.
VoodooChild92

5
Nhìn thấy số phiếu phản đối, bạn có thể nghĩ đến việc xóa câu trả lời này để dành "chỗ" cho các câu trả lời khác.
PatrickT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.