وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

ادغام نمودارهای Matplotlib در PDF در پایتون با BORB

0 1
زمان لازم برای مطالعه: 5 دقیقه


معرفی

این فرمت سند قابل حمل (PDF) آیا فرمت wysiwyg نیست (آنچه می بینید همان چیزی است که می گیرید). این برای پلتفرم-آگنوستیک، مستقل از سیستم عامل اصلی و موتورهای رندر توسعه داده شد.

برای دستیابی به این هدف، PDF ساخته شد تا از طریق چیزی بیشتر شبیه به یک زبان برنامه نویسی و متکی با آن تعامل داشته باشد. روی مجموعه ای از دستورالعمل ها و عملیات برای رسیدن به نتیجه. در واقع PDF است مستقر روی یک زبان برنامه نویسی – پست اسکریپتکه اولین دستگاه مستقل بود زبان توضیحات صفحه.

در این راهنما، ما استفاده خواهیم کرد بورب – یک کتابخانه پایتون که به خواندن، دستکاری و تولید اسناد PDF اختصاص یافته است. هم یک مدل سطح پایین (که به شما امکان می‌دهد به مختصات و طرح‌بندی دقیق در صورت استفاده از آن‌ها دسترسی داشته باشید) و هم یک مدل سطح بالا (که در آن می‌توانید محاسبات دقیق حاشیه‌ها، موقعیت‌ها و غیره را به یک مدیر طرح‌بندی واگذار کنید) ارائه می‌دهد. .

Matplotlib یک کتابخانه تجسم داده است که نسل کاملی از مهندسان را برای شروع تجسم داده ها و موتور پشت بسیاری از کتابخانه های محبوب دیگر مانند Seaborn تحریک کرد.

با توجه به اینکه اسناد PDF رایج برای ایجاد گزارش ها چقدر است (که اغلب اوقات شامل نمودارها است) ، ما نگاهی خواهیم انداخت روش ادغام نمودارهای MATPLOTLIB در یک سند PDF با استفاده از BORB.

نصب borb (و Matplotlib)

بورب را می توان از منبع دانلود کرد روی GitHub، یا نصب شده از طریق pip:

$ pip install borb

Matplotlib قابل نصب از طریق pip:

$ pip install matplotlib

ادغام نمودارهای Matplotlib در اسناد PDF با BORB

قبل از اینکه بتوانیم یک نمودار ایجاد کنیم ، مانند نمودار پای ، ما قصد داریم یک تابع ابزار کوچک را تولید کنیم که تولید می کند 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):
  
  base_hsv_color: HSVColor = HSVColor.from_rgb(HexColor("56cbf9"))
  
  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 (رنگ، ​​اشباع، مقدار/رنگ، اشباع، روشنایی) نمایش های جایگزین مدل رنگی RGB هستند.

HSL و HSV/HSB در دهه 1970 توسط محققان گرافیک کامپیوتری طراحی شدند تا با روشی که بینایی انسان ویژگی‌های رنگ‌ساز را درک می‌کند، هماهنگی بیشتری داشته باشد. در این مدل‌ها، رنگ‌های هر رنگ در یک برش شعاعی، حول محور مرکزی رنگ‌های خنثی قرار می‌گیرند که از سیاه در پایین تا سفید در بالا متغیر است:

طیف مخروطی hsv
اعتبار: مجوز Wikimedia (CC BY-SA 3.0).

مزیت استفاده از این نمایندگی برای Color این است که ما به راحتی می توانیم طیف رنگ را به قسمت های مساوی تقسیم کنیم.

اکنون می توانیم a را تعریف کنیم create_pie_chart() تابع (یا تابعی برای انواع دیگر نمودارها):


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

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

  return Chart(
    plt.gcf(),
    width=Decimal(200),
    height=Decimal(200),
    horizontal_alignment=Alignment.CENTERED,
  )

در اینجا، ما از Matplotlib برای ایجاد نمودار دایره ای، از طریق pie() تابع.

اگر می‌خواهید درباره ایجاد نمودارهای پای بیشتر بدانید، راهنمای ما برای نمودارهای پای Matplotlib را بخوانید!

این gcf() عملکرد از PyPlot نمونه رقم فعلی را برمی گرداند (get جفوری fتصویر کردن). این شکل را می توان با تزریق آن در یک سند PDF در یک سند جاسازی کرد Chart سازنده، در کنار آرگومان های سفارشی سازی شما مانند width، height و horizontal_alignment.

خودشه! شما فقط یک شکل Matplotlib را به آن ارائه دهید Chart سازنده

اضافه کردن نمودار Matplotlib به یک سند PDF

اکنون زمان آن رسیده است که PDF اصلی خود را ایجاد کنیم Document و به آن محتوا اضافه کنید.


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


pdf = Document()


page = Page()


pdf.append_page(page)


layout: PageLayout = MultiColumnLayout(page)


layout.add(Paragraph("About Lorem Ipsum", 
                     font_size=Decimal(20), 
                     font="Helvetica-Bold"))

ما از خط فاصله در این PDF استفاده خواهیم کرد تا اطمینان حاصل شود که متن می‌تواند حتی راحت‌تر تنظیم شود. خط فاصله در borb بسیار ساده است:


from borb.pdf.canvas.layout.hyphenation.hyphenation import Hyphenation


hyphenation_algorithm: Hyphenation = Hyphenation("en-gb")


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

اکنون می توانیم با استفاده از تابعی که قبلاً اعلام کردیم، نمودار دایره ای اضافه کنیم.


layout.add(create_piechart(("Loren", "Ipsum", "Dolor"), 
                           (0.6, 0.3, 0.1)))

در ادامه سه مورد دیگر را می نویسیم 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 cities of the word in classical literature, 
    discovered the undoubtable source.
    """, text_alignment=Alignment.JUSTIFIED, hyphenation=hyphenation_algorithm))


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


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 روی the theory of ethics, very popular during the Renaissance.
    """, text_alignment=Alignment.JUSTIFIED, hyphenation=hyphenation_algorithm))

بیایید طرح دیگری را اضافه کنیم


layout.add(create_piechart(("Loren", "Ipsum", "Dolor", "Sit", "Amet"), 
                           (600, 30, 89, 100, 203)))

و یکی دیگر 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 websites still in their infancy. 
    Various versions have evolved over the years, sometimes by accident, sometimes روی purpose (injected humor and the like).
    """, text_alignment=Alignment.JUSTIFIED, hyphenation=hyphenation_algorithm))

در نهایت، ما می توانیم ذخیره کنیم Document:


with open("output.pdf", "wb") as pdf_file_handle:
  PDF.dumps(pdf_file_handle, pdf)

اجرای این کد منجر به یک سند PDF می شود که به شکل زیر است:

ادغام نمودارهای matplotlib در pdf با python و بورب

نتیجه

در این راهنما شما یاد گرفته اید که چگونه نمودارهای Matplotlib را با استفاده از یک PDF ادغام کنید borb. از اینجا، آسمان حد است! هرچه با تجسم داده ها خلاقیت بیشتری داشته باشید، PDF های شما زیباتر می شوند.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-08 04:10:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید