ویژگی تصویر

معرفی کتابخانه pygal در پایتون

  /  پایتون   /  کتابخانه pygal در پایتون
بنر تبلیغاتی الف

کتابخانه pygal یک ابزار تولید نمودار در پایتون است که خروجی آن به صورت SVG (گرافیک برداری مقیاس‌پذیر) تولید می‌شود. Pygal برای ساخت نمودارهای زیبا، پاسخگو و تعاملی مناسب است و با دستورات نسبتاً ساده می‌توان انواع نمودارهای خطی، میله‌ای، دایره‌ای، پراکندگی و شاخص‌های دیگر را تولید کرد. به دلیل استفاده از SVG، خروجی‌ها قابل بزرگنمایی بدون افت کیفیت هستند و به راحتی در وب‌سایت‌ها قابل جاسازی‌اند.

چرا از pygal استفاده کنیم؟

  • خروجی SVG و قابل ویرایش با CSS/JS
  • پشتیبانی از نمودارهای تعاملی (tooltips، hover)
  • سینتکس ساده و مناسب برای تولید سریع گرافیک
  • قابلیت سفارشی‌سازی با styles و قالب‌ها
  • مناسب برای گزارش‌های تحت وب و داشبوردهای ساده

نصب

نصب pygal بسیار ساده است:

pip install pygal

اگر نیاز به تبدیل SVG به PNG دارید، می‌توانید از کتابخانه‌هایی مانند cairosvg استفاده کنید:

pip install cairosvg

کد بالا pygal و در صورت نیاز cairosvg را نصب می‌کند. تبدیل به PNG به صورت جداگانه توضیح داده خواهد شد.

مثال پایه — نمودار خطی

import pygal

line = pygal.Line()
line.title = 'نمونه تغییرات'
line.x_labels = ['شنبه', 'یک‌شنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه']
line.add('دسته A', [5, 9, 7, 8, 5])
line.add('دسته B', [3, 4, 6, 3, 4])
line.render_to_file('line_chart.svg')

در این مثال یک نمودار خطی ساده ساخته می‌شود، برچسب‌های محور افقی تنظیم شده و دو سری داده اضافه شده‌اند. خروجی در فایل line_chart.svg ذخیره می‌شود که می‌توان آن را با مرورگر باز کرد یا در HTML جاسازی نمود.

شخصی‌سازی استایل

import pygal
from pygal.style import Style

custom_style = Style(
    background='transparent',
    plot_background='#fff',
    foreground='#333',
    foreground_strong='#000',
    foreground_subtle='#666',
    colors=('#E69A2A', '#56B4E9', '#009E73')
)

bar = pygal.Bar(style=custom_style, title='نمودار میله‌ای با استایل سفارشی')
bar.add('گروه 1', [10, 12, 9])
bar.add('گروه 2', [7, 8, 5])
bar.x_labels = ['A', 'B', 'C']
bar.render_to_file('bar_custom.svg')

در این قطعه کد یک استایل دلخواه تعریف و به نمودار میله‌ای اعمال شده است. با استفاده از کلاس Style می‌توان رنگ‌ها، پس‌زمینه و رنگ متن را تعیین کرد تا خروجی مطابق هویت بصری شما شود.

نمودار پای و tooltip تعاملی

import pygal

pie = pygal.Pie(inner_radius=0.4)  # doughnut chart
pie.title = 'تقسیم‌بندی فروش'
pie.add('محصول A', 45)
pie.add('محصول B', 30)
pie.add('محصول C', 25)
pie.render_to_file('sales_pie.svg')

نمودار دایره‌ای با inner_radius تبدیل به دونات می‌شود. در مرورگرهای مدرن، با بردن موس روی هر بخش، اطلاعات (tooltip) نمایش داده می‌شود زیرا خروجی SVG شامل داده‌های قابل‌تعامل است.

رندر کردن به PNG یا نگهداری SVG

Pygal به‌صورت پیش‌فرض خروجی SVG می‌دهد. برای تبدیل SVG به PNG می‌توان از ابزارهایی مانند cairosvg استفاده کرد:

import pygal
import cairosvg

chart = pygal.Line()
chart.add('Sample', [1,2,3])
svg_data = chart.render()
cairosvg.svg2png(bytestring=svg_data, write_to='chart.png')

در این مثال خروجی SVG ابتدا در متغیر گرفته شده و سپس با cairosvg به PNG تبدیل می‌شود. توجه کنید که تبدیل به فرمت‌های raster نیازمند نصب ماژول‌های جانبی و محیط مناسب است.

ادغام با وب (مثال Flask)

from flask import Flask, render_template_string
import pygal

app = Flask(__name__)

@app.route('/')
def index():
    chart = pygal.Bar()
    chart.add('A', [3,5,2])
    chart.add('B', [4,6,1])
    svg = chart.render_data_uri()
    return render_template_string('<img src="{{ svg }}">', svg=svg)

if __name__ == '__main__':
    app.run(debug=True)

در این نمونه یک اپ Flask داریم که نمودار را به صورت data URI تولید کرده و مستقیماً در تگ <img> قرار می‌دهد. این روش برای جاسازی ساده در صفحات وب بسیار مناسب است.

کار با pandas

می‌توانید داده‌ها را از pandas استخراج کرده و به pygal بدهید. کافی‌ست سطریابی و تبدیل سری‌ها به لیست را انجام دهید و سپس .add() را صدا بزنید. این روش برای گزارش‌گیری از دیتافریم‌ها کاربردی است.

مزایا و نکات فنی

  • SVG: مقیاس‌پذیر و قابل استایل‌دهی با CSS و JS.
  • تعاملی: tooltips داخلی و امکان فعال‌سازی کلیک/hover.
  • مناسب وب: خروجی سبک و قابل جاسازی.
  • محدودیت‌ها: برای دیتاهای بسیار حجیم یا نیازهای گرافیکی پیشرفته (custom drawing) ممکن است matplotlib یا plotly مناسب‌تر باشند.
ویژگیpygalmatplotlib
خروجیSVG (تعاملی)PNG/PDF/… (غیر تعاملی)
سادگیبسیار ساده برای نمودارهای رایجانعطاف‌پذیر اما پیچیده‌تر
مناسب برای وببلهنسبتاً خیر (مستقیماً)

بهترین شیوه‌ها و نکات حرفه‌ای

  • برای داده‌های حجیم، سری‌ها را پیش‌پردازش کنید و فقط خلاصه‌ها را رسم کنید تا فایل SVG سبک بماند.
  • از استایل‌های سفارشی برای همسان‌سازی با برند استفاده کنید و رنگ‌ها را در یک متغیر مرکزی نگه دارید.
  • برای تولید پویا در وب، از render_data_uri() یا render_response() در فریم‌ورک‌های وب بهره بگیرید.
  • برای چاپ با کیفیت یا انتشار آفلاین ممکن است تبدیل به PNG/PDF لازم شود؛ از cairosvg یا ابزارهای مشابه استفاده کنید.

جمع‌بندی

pygal یک ابزار مناسب و سریع برای تولید نمودارهای SVG در پایتون است که به‌خصوص برای وب و گزارش‌های تعاملی کاربرد دارد. اگر به دنبال خروجی‌های برداری، تعاملی و با سینتکس ساده هستید، pygal گزینه‌ای قدرتمند است؛ و در صورت نیاز به کنترل بسیار دقیق یا حجم داده زیاد می‌توان آن را با ابزارهای دیگر تکمیل کرد.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: