چرا نمودارها را به‌صورت برنامه‌نویسی بسازیم؟?

خطوط لوله گزارش‌گیری خودکار اغلب به نمودارهای جاسازی‌شده در کتاب‌های کار Excel نیاز دارند، مانند خلاصه‌های فصلی، داشبوردهای نتایج یادگیری ماشین، یا معیارهای عملیاتی. انجام این کار بدون Microsoft Excel به معنای عدم هزینهٔ مجوز و عدم نیاز به تعامل گرافیکی است.

Aspose.Cells FOSS for Python یک API نموداری تمیز و پایتونیک فراهم می‌کند: یک متد برای هر نوع نمودار، یک رشته ساده برای عنوان، و پیکربندی سری‌ها بر پایه آرگومان‌های کلیدی. کل API در زیر پوشش داده شده است.


نصب

pip install aspose-cells-foss

کلاس‌های مورد نیاز خود را وارد کنید:

from aspose.cells_foss import Workbook, Cell

نمودارها از طریق ws.charts; نیازی به وارد کردن ماژول جداگانه نمودار نیست.


نگاهی کلی به API نمودار

چه می‌خواهیدچگونه این کار را انجام دهید
افزودن یک نمودار ستونیws.charts.add_bar(top_row, left_col, bottom_row, right_col)
افزودن یک نمودار خطیws.charts.add_line(top_row, left_col, bottom_row, right_col)
افزودن یک نمودار میله‌ایws.charts.add_bar(top_row, left_col, bottom_row, right_col)
افزودن یک نمودار دایره‌ایws.charts.add_pie(top_row, left_col, bottom_row, right_col)
تنظیم عنوانchart.title = "My Chart" (رشته ساده؛ نه .title.text)
تنظیم دسته‌بندی‌های محور xchart.category_data = "A2:A6"
افزودن یک سری نام‌دارchart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
نمایش راهنماchart.show_legend = True
تنظیم موقعیت راهنماchart.legend_position = "bottom"

تمام ایندکس‌های سطر و ستون صفر مبنا. این add_* متدها مقدار Chart شیء به‌صورت مستقیم (نه یک ایندکس).


نمودار ستونی: گام به گام

بیایید یک نمودار ستونی بسازیم که درآمد و هزینه‌های فصلی را نشان می‌دهد.

گام ۱: ایجاد کتاب کار و نوشتن داده‌ها

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

##Data
quarters = ["Q1", "Q2", "Q3", "Q4"]
revenue  = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

for i, (q, r, e) in enumerate(zip(quarters, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

گام ۲: افزودن نمودار

نمودار را زیر داده‌ها قرار دهید (از ردیف ۷ به بعد، در بازهٔ ستون‌های ۰‑۸):

chart = ws.charts.add_bar(6, 0, 22, 8)

گام ۳: پیکربندی عنوان و افسانه

chart.title = "Quarterly Revenue vs Expenses"
chart.show_legend = True
chart.legend_position = "bottom"

مرحله ۴: افزودن سری داده‌ها

هر سری به یک بازه مقدار، بازه دسته‌بندی و یک نام نیاز دارد:

chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

مرحله ۵: ذخیره

wb.save("quarterly_report.xlsx")
print("Chart saved to quarterly_report.xlsx")

مثال کامل در یک بلوک:

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

##Data
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

data = [("Q1", 50000, 32000), ("Q2", 62000, 38000),
        ("Q3", 71000, 41000), ("Q4", 89000, 47000)]
for i, (q, r, e) in enumerate(data, start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Quarterly Revenue vs Expenses"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")
chart.show_legend = True
chart.legend_position = "bottom"

wb.save("quarterly_report.xlsx")

نمودار خطی: روند ماهانه

الگوی یکسان برای add_line():

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]

months  = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
actuals = [42000, 47500, 53000, 49000, 61000, 68000]
targets = [45000, 45000, 50000, 55000, 60000, 65000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Actual"
ws.cells["C1"].value = "Target"

for i, (m, a, t) in enumerate(zip(months, actuals, targets), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = a
    ws.cells[f"C{i}"].value = t

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue: Actual vs Target"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Actual")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Target")
chart.show_legend = True
chart.legend_position = "right"

wb.save("monthly_trend.xlsx")

نمودار دایره‌ای: سهم بازار

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]

segments = ["Product A", "Product B", "Product C", "Product D"]
shares   = [40, 25, 20, 15]

ws.cells["A1"].value = "Segment"
ws.cells["B1"].value = "Share %"
for i, (s, v) in enumerate(zip(segments, shares), start=2):
    ws.cells[f"A{i}"].value = s
    ws.cells[f"B{i}"].value = v

chart = ws.charts.add_pie(6, 0, 20, 7)
chart.title = "Market Share by Product"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Share")
chart.show_legend = True
chart.legend_position = "right"

wb.save("market_share.xlsx")

خطاهای رایج که باید از آن‌ها اجتناب کرد

نادرستدرست
ws.charts.add(ChartType.COLUMN, 5, 0, 15, 5)ws.charts.add_bar(5, 0, 15, 5)
chart.title.text = "Revenue"chart.title = "Revenue"
chart.n_series.add("B2:B5", True) (موقعیتی)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartTypeنیازی نیست؛ استفاده کنید ws.charts.add_bar() مستقیم
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (سطح نمودار)

منابع