<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
PDF 格式是與平臺無關,它獨立於底層作業系統和渲染引擎。事實上,PDF 是基於一種指令碼語言——PostScript,它是第一個獨立於裝置的頁面描述語言。
在本指南中,我們將使用 borb —— 一個專門用於閱讀、操作和生成 PDF 檔案的 Python 庫。它提供了一個低階模型(允許您存取精確的座標和佈局)和一個高階模型(您可以將邊距、位置等精確計算委託給佈局管理器) .
matplotlib
是一個資料視覺化庫,也是許多其他流行庫(如 Seaborn)背後的引擎。
基於用於建立報告(通常包括圖形)的常見 PDF 檔案,我們將看看如何使用 borb
將 Matplotlib
圖表整合到 PDF 檔案中。
borb 可以從 GitHub 上的原始碼下載,或通過 pip 安裝:
$ pip install borb
matplotlib 也可以通過 pip 安裝:
$ pip install matplotlib
用 Borb 在 PDF 檔案中整合 Matplotlib
圖表
在建立餅圖等圖表之前,我們將編寫一個小的效用函數,該函數生成 N 種顏色,均勻分佈在顏色光譜中。
每當我們需要建立繪圖併為每個部分著色時,這將對我們有所幫助:
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 是由計算機圖學研究人員在 1970 年代設計的,目的是更接近人類視覺感知色彩屬性的方式。在這些模型中,每種色調的顏色都排列在一個徑向切片中,圍繞中性色的中心軸,範圍從底部的黑色到頂部的白色:
用它表示顏色的優點是我們可以輕鬆地將顏色光譜分成相等的部分。
現在我們可以定義一個 create_pie_chart() 函數(或其他型別圖的函數):
# 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()
函數建立餅圖。
PyPlot 範例的 gcf()
函數返回當前圖形。該圖可以嵌入到 PDF 檔案中,方法是將其注入到 Chart
建構函式中,並與您的自定義引數(例如width, height 和 horizontal_alignment)一起插入。
我們只需向Chart建構函式提供一個 Matplotlib
圖。
現在是時候建立我們的 PDF 檔案並向其中新增內容了。
# 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 中的連字元非常簡單:
# 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))
現在我們可以使用我們之前宣告的函數新增餅圖;
# Write graph layout.add(create_piechart(["Loren", "Ipsum", "Dolor"], [0.6, 0.3, 0.1]))
接下來我們將編寫另外三個 Paragraph
物件。其中一個將不僅僅表示參照(側面邊框,不同字型等)。
# 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))
讓我們新增另一個繪圖。
# Write graph layout.add(create_piechart(["Loren", "Ipsum", "Dolor", "Sit", "Amet"], [600, 30, 89, 100, 203]))
還有一段內容(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))
最後,我們可以儲存檔案(Document):
# Write to disk with open("output.pdf", "wb") as pdf_file_handle: PDF.dumps(pdf_file_handle, pdf)
執行此程式碼會生成如下所示的 PDF 檔案:
到此這篇關於Python 如何將 matplotlib 圖表整合進到PDF 中的文章就介紹到這了,更多相關 matplotlib 圖表整合到 PDF 中內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45