我想獲取 2 個圖形物件并將它們一起保存在一個 pdf 頁面上。這是我的代碼,目前將它們保存在 2 個單獨的頁面上:
if (output_pdf_name is not None):
pdf = matplotlib.backends.backend_pdf.PdfPages(output_pdf_name)
explained_seq_fetures_letters_list1 = explained_seq_fetures_letters1 if multiple_samples else [
explained_seq_fetures_letters1]
explained_seq_fetures_letters_list2 = explained_seq_fetures_letters2 if multiple_samples else [
explained_seq_fetures_letters2]
for explained_seq_fetures_letters_item1, explained_seq_fetures_letters_item2 in zip(explained_seq_fetures_letters_list1,explained_seq_fetures_letters_list2):
# create Logo object
explained_seq_fetures_letters_item = pd.DataFrame(explained_seq_fetures_letters_item1, columns=Logo_letters)
IG_logo1 = create_DNA_logo(PWM_df=explained_seq_fetures_letters_item,
secondary_color=secondary_color)
pdf.savefig(IG_logo1.ax.figure)
explained_seq_fetures_letters_item2 = explained_seq_fetures_letters_item2[explained_seq_fetures_letters_item2 != 0].reshape(-1, 1)
explained_seq_fetures_letters_item = pd.DataFrame(explained_seq_fetures_letters_item2, columns=Logo_symbol)
IG_logo2 = create_DNA_logo(PWM_df=explained_seq_fetures_letters_item,
secondary_color=True)
pdf.savefig(IG_logo2.ax.figure)
plt.close('all')
pdf.close()
IG_logo.ax.figure 是圖形物件,如圖所示:
它是由 logomaker 庫創建的。
這是我的圖的一個例子:
我試圖找到一個解決方案,但似乎沒有簡單的解決方案。有任何想法嗎?
謝謝!
uj5u.com熱心網友回復:
免責宣告:我是圖書館的作者borb
(在這個答案中使用)
borb
是一個純 Python 庫,可以輕松處理 PDF 檔案。它還具有方便的包裝器,可以與其他著名的庫(PIL
、matplotlib
等)進行互動
有一個巨大的示例存盤庫,其中一個部分正好處理您的問題;matplotlib
在 PDF 中插入圖表。您可以在此處找到該部分。
為了完整起見,我將復制/粘貼下面的代碼。請記住,此示例首先構建圖表物件,您顯然不需要該部分:
from borb.pdf.document.document import Document
from borb.pdf.page.page import Page
from borb.pdf.canvas.layout.page_layout.multi_column_layout import SingleColumnLayout
from borb.pdf.canvas.layout.page_layout.page_layout import PageLayout
from borb.pdf.canvas.layout.text.paragraph import Paragraph
from borb.pdf.pdf import PDF
from borb.pdf.canvas.layout.image.chart import Chart
from decimal import Decimal
import matplotlib.pyplot as MatPlotLibPlot
import numpy as np
import pandas as pd
def create_plot() -> None:
# build DataFrame
df = pd.DataFrame(
{
"X": range(1, 101),
"Y": np.random.randn(100) * 15 range(1, 101),
"Z": (np.random.randn(100) * 15 range(1, 101)) * 2,
}
)
# plot
fig = MatPlotLibPlot.figure()
ax = fig.add_subplot(111, projection="3d")
ax.scatter(df["X"], df["Y"], df["Z"], c="skyblue", s=60)
ax.view_init(30, 185)
# return
return MatPlotLibPlot.gcf()
def main():
# create Document
doc: Document = Document()
# create Page
page: Page = Page()
# add Page to Document
doc.append_page(page)
# set a PageLayout
layout: PageLayout = SingleColumnLayout(page)
# add a Paragraph
layout.add(Chart(create_plot(), width=Decimal(256), height=Decimal(256)))
# store
with open("output.pdf", "wb") as pdf_file_handle:
PDF.dumps(pdf_file_handle, doc)
if __name__ == "__main__":
main()
其他值得一提的事情:
PageLayout
決定您Page
將如何布置。在這個例子中,我選擇SingleColumnLayout
了你所期望的,內容占據了整個頁面(減去邊距)并從上到下流動。- 如果您更喜歡科學期刊的美學風格,您可以嘗試其他
PageLayout
實作(例如)。MultiColumnLayout
- 您可以將圖表嵌套在
Table
物件內(另一種并排顯示它們的方式)。 - 您可以將內容作為附件添加到 PDF。您可以將原始資料(作為 csv)包含到 PDF 中,從而確保其他人可以輕松地以自己喜歡的樣式構建自己的資料可視化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/487345.html
標籤:Python matplotlib pdf 数字 保存无花果