欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?如何將?matplotlib?圖表集成進(jìn)到PDF?中

 更新時(shí)間:2022年03月28日 17:22:47   作者:Python中文社區(qū)  
這篇文章主要介紹了Python?如何將?matplotlib?圖表集成進(jìn)到PDF?中,文章介紹內(nèi)容詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助

1.介紹

PDF 格式是與平臺(tái)無關(guān),它獨(dú)立于底層操作系統(tǒng)和渲染引擎。事實(shí)上,PDF 是基于一種腳本語(yǔ)言——PostScript,它是第一個(gè)獨(dú)立于設(shè)備的頁(yè)面描述語(yǔ)言。

在本指南中,我們將使用 borb —— 一個(gè)專門用于閱讀、操作和生成 PDF 文檔的 Python 庫(kù)。它提供了一個(gè)低級(jí)模型(允許您訪問精確的坐標(biāo)和布局)和一個(gè)高級(jí)模型(您可以將邊距、位置等精確計(jì)算委托給布局管理器) .

matplotlib 是一個(gè)數(shù)據(jù)可視化庫(kù),也是許多其他流行庫(kù)(如 Seaborn)背后的引擎。

基于用于創(chuàng)建報(bào)告(通常包括圖形)的常見 PDF 文檔,我們將看看如何使用 borbMatplotlib 圖表集成到 PDF 文檔中。

2.安裝 borb和 matplotlib

borb 可以從 GitHub 上的源代碼下載,或通過 pip 安裝:

$ pip install borb

matplotlib 也可以通過 pip 安裝:

$ pip install matplotlib

用 Borb 在 PDF 文檔中集成 Matplotlib 圖表

在創(chuàng)建餅圖等圖表之前,我們將編寫一個(gè)小的效用函數(shù),該函數(shù)生成 N 種顏色,均勻分布在顏色光譜中。

每當(dāng)我們需要?jiǎng)?chuàng)建繪圖并為每個(gè)部分著色時(shí),這將對(duì)我們有所幫助:

from borb.pdf.canvas.color.color import HSVColor, HexColor
from decimal import Decimal
import typing
?
def create_n_colors(n: int) -> typing.List[str]:
? # The base color is borb-blue
? base_hsv_color: HSVColor = HSVColor.from_rgb(HexColor("56cbf9"))
? # This array comprehension creates n HSVColor objects, transforms then to RGB, and then returns their hex string
? return [HSVColor(base_hsv_color.hue + Decimal(x / 360), Decimal(1), Decimal(1)).to_rgb().to_hex_string() for x in range(0, 360, int(360/n))]

HSL 和 HSV/HSB 是由計(jì)算機(jī)圖形學(xué)研究人員在 1970 年代設(shè)計(jì)的,目的是更接近人類視覺感知色彩屬性的方式。在這些模型中,每種色調(diào)的顏色都排列在一個(gè)徑向切片中,圍繞中性色的中心軸,范圍從底部的黑色到頂部的白色:

用它表示顏色的優(yōu)點(diǎn)是我們可以輕松地將顏色光譜分成相等的部分。

現(xiàn)在我們可以定義一個(gè) create_pie_chart() 函數(shù)(或其他類型圖的函數(shù)):

# New import(s)
import matplotlib.pyplot as plt
from borb.pdf.canvas.layout.image.chart import Chart
from borb.pdf.canvas.layout.layout_element import Alignment
?
def create_piechart(labels: typing.List[str], data: typing.List[float]):
?
? # Symetric figure to ensure equal aspect ratio
? fig1, ax1 = plt.subplots(figsize=(4, 4))
? ax1.pie(
? ? data,
? ? explode=[0 for _ in range(0, len(labels))],
? ? labels=labels,
? ? autopct="%1.1f%%",
? ? shadow=True,
? ? startangle=90,
? ? colors=create_n_colors(len(labels)),
? )
?
? ax1.axis("equal") ?# Equal aspect ratio ensures that pie is drawn as a circle.
?
? return Chart(
? ? plt.gcf(),
? ? width=Decimal(200),
? ? height=Decimal(200),
? ? horizontal_alignment=Alignment.CENTERED,
? )

在這里,我們使用 Matplotlib 通過 pie() 函數(shù)創(chuàng)建餅圖。

PyPlot 實(shí)例的 gcf() 函數(shù)返回當(dāng)前圖形。該圖可以嵌入到 PDF 文檔中,方法是將其注入到 Chart 構(gòu)造函數(shù)中,并與您的自定義參數(shù)(例如width, height 和 horizontal_alignment)一起插入。

我們只需向Chart構(gòu)造函數(shù)提供一個(gè) Matplotlib 圖。

3.將 Matplotlib 圖表添加到 PDF 文檔

現(xiàn)在是時(shí)候創(chuàng)建我們的 PDF 文檔并向其中添加內(nèi)容了。

# New import(s)
from borb.pdf.document import Document
from borb.pdf.page.page import Page
from borb.pdf.pdf import PDF
from borb.pdf.canvas.layout.page_layout.multi_column_layout import MultiColumnLayout
from borb.pdf.canvas.layout.page_layout.page_layout import PageLayout
from borb.pdf.canvas.layout.text.paragraph import Paragraph
?
# Create empty Document
pdf = Document()
?
# Create empty Page
page = Page()
?
# Add Page to Document
pdf.append_page(page)
?
# Create PageLayout
layout: PageLayout = MultiColumnLayout(page)
?
# Write title
layout.add(Paragraph("About Lorem Ipsum",?
? ? ? ? ? ? ? ? ? ? ?font_size=Decimal(20),?
? ? ? ? ? ? ? ? ? ? ?font="Helvetica-Bold"))

我們將在此 PDF 中使用連字符,以確保文本的布局更加流暢。borb 中的連字符非常簡(jiǎn)單:

# New import(s)
from borb.pdf.canvas.layout.hyphenation.hyphenation import Hyphenation
?
# Create hyphenation algorithm
hyphenation_algorithm: Hyphenation = Hyphenation("en-gb")
?
# Write paragraph
layout.add(Paragraph(
? ? """
? ? Lorem Ipsum is simply dummy text of the printing and typesetting industry.?
? ? Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,?
? ? when an unknown printer took a galley of type and scrambled it to make a type specimen book.?
? ? It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.?
? ? It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages,?
? ? and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
? ? """, text_alignment=Alignment.JUSTIFIED, hyphenation=hyphenation_algorithm))

現(xiàn)在我們可以使用我們之前聲明的函數(shù)添加餅圖;

# Write graph
layout.add(create_piechart(["Loren", "Ipsum", "Dolor"],?
? ? ? ? ? ? ? ? ? ? ? ? ? ?[0.6, 0.3, 0.1]))

接下來我們將編寫另外三個(gè) Paragraph對(duì)象。其中一個(gè)將不僅僅表示引用(側(cè)面邊框,不同字體等)。

# Write paragraph
layout.add(Paragraph(
? ? """
? ? Contrary to popular belief, Lorem Ipsum is not simply random text.?
? ? It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.?
? ? Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words,?
? ? consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature,?
? ? discovered the undoubtable source.
? ? """, text_alignment=Alignment.JUSTIFIED, hyphenation=hyphenation_algorithm))
?
# Write paragraph
layout.add(Paragraph(
? ? """
? ? Lorem Ipsum is simply dummy text of the printing and typesetting industry.?
? ? """,?
? ? font="Courier-Bold",
? ? text_alignment=Alignment.JUSTIFIED,?
? ? hyphenation=hyphenation_algorithm,
? ? border_color=HexColor("56cbf9"),
? ? border_width=Decimal(3),
? ? border_left=True,
? ? padding_left=Decimal(5),
? ? padding_bottom=Decimal(5),
))
?
# Write paragraph
layout.add(Paragraph(
? ? """
? ? Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum"?
? ? (The Extremes of Good and Evil) by Cicero, written in 45 BC.?
? ? This book is a treatise on the theory of ethics, very popular during the Renaissance.
? ? """, text_alignment=Alignment.JUSTIFIED, hyphenation=hyphenation_algorithm))

讓我們添加另一個(gè)繪圖。

# Write graph
layout.add(create_piechart(["Loren", "Ipsum", "Dolor", "Sit", "Amet"],?
? ? ? ? ? ? ? ? ? ? ? ? ? ?[600, 30, 89, 100, 203]))

還有一段內(nèi)容(Paragraph):

# Write paragraph
layout.add(Paragraph(
? ? """
? ? It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.?
? ? The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here',?
? ? making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text,?
? ? and a search for 'lorem ipsum' will uncover many web sites still in their infancy.?
? ? Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
? ? """, text_alignment=Alignment.JUSTIFIED, hyphenation=hyphenation_algorithm))

最后,我們可以存儲(chǔ)文檔(Document):

# Write to disk
with open("output.pdf", "wb") as pdf_file_handle:
? PDF.dumps(pdf_file_handle, pdf)

運(yùn)行此代碼會(huì)生成如下所示的 PDF 文檔:

到此這篇關(guān)于Python 如何將 matplotlib 圖表集成進(jìn)到PDF 中的文章就介紹到這了,更多相關(guān) matplotlib 圖表集成到 PDF 中內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論