چگونه نمودارها را در اکسل با پایتون ایجاد کنیم

چگونه نمودارها را در اکسل با پایتون ایجاد کنیم

نمودارها داده‌های خام صفحه‌گسترده را به بینش‌های بصری تبدیل می‌کنند. Aspose.Cells FOSS for Python به شما امکان می‌دهد تا نمودارهای ستونی، خطی، میله‌ای و دایره‌ای را به‌صورت برنامه‌نویسی ایجاد کنید، با کنترل کامل بر روی سری‌های داده، برچسب‌های دسته‌بندی، عنوان نمودار و موقعیت آن، بدون نیاز به مایکروسافت اکسل.

چرا نمودارها را با Aspose.Cells FOSS ایجاد کنیم؟

  1. بدون نیاز به اکسل: نمودارها را به‌صورت کامل در پایتون، بر روی هر سیستم‌عاملی بسازید.
  2. API متد-به-ازای-نوع: از add_bar()، add_line()، add_pie()، add_area() و موارد دیگر استفاده کنید — یک متد برای هر نوع نمودار.
  3. سری‌های نام‌دار: هر سری را با آرگومان‌های کلیدی name=، category_data= پیکربندی کنید.
  4. قرارگیری دقیق: مرزهای نمودار را با مختصات سلول‌ها (top_row، left_col، bottom_row، right_col) کنترل کنید.

راهنمای گام به گام

مرحله ۱: نصب Aspose.Cells FOSS برای Python

pip install aspose-cells-foss

مرحله ۲: ایجاد یک Workbook و پر کردن داده‌ها

یک کتاب‌کار جدید ایجاد کنید و داده‌های عددی به‌همراه برچسب‌های دسته‌بندی را در سلول‌ها بنویسید:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Data"

##Category labels in column A (rows 2-5, leaving row 1 for a header)
ws.cells["A1"].value = "Quarter"
ws.cells["A2"].value = "Q1"
ws.cells["A3"].value = "Q2"
ws.cells["A4"].value = "Q3"
ws.cells["A5"].value = "Q4"

##Revenue series in column B
ws.cells["B1"].value = "Revenue"
ws.cells["B2"].value = 50000
ws.cells["B3"].value = 62000
ws.cells["B4"].value = 71000
ws.cells["B5"].value = 89000

##Expense series in column C
ws.cells["C1"].value = "Expenses"
ws.cells["C2"].value = 32000
ws.cells["C3"].value = 38000
ws.cells["C4"].value = 41000
ws.cells["C5"].value = 47000

مرحله ۳: افزودن نمودار ستونی

از ws.charts.add_bar(top_row, left_col, bottom_row, right_col) برای درج یک نمودار ستونی استفاده کنید. این متد یک شیء نمودار را به‌صورت مستقیم برمی‌گرداند:

##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)

اندیس‌های سطر و ستون از صفر شروع می‌شوند.


مرحله ۴: پیکربندی سری داده‌ها

هر سری داده را با استفاده از chart.n_series.add() و آرگومان‌های کلیدی اضافه کنید:

##Add Revenue series
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")

##Add Expenses series
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

آرگومان category_data محدوده سلول‌ها را برای برچسب‌های محور x مشخص می‌کند. آرگومان name برچسب افسانه سری را تنظیم می‌کند.


مرحله 5: تنظیم عنوان نمودار و داده‌های دسته‌بندی

عنوان نمودار را به‌صورت رشته ساده تنظیم کنید:

chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"   # x-axis labels at chart level
chart.show_legend = True
chart.legend_position = "bottom"

مرحله ۶: ذخیره‌کردن کتاب‌کار

workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")

مثال کامل نمودار ستونی:

from aspose.cells_foss import Workbook, Cell

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

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

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

for i, (label, rev, exp) in enumerate(zip(labels, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = label
    ws.cells[f"B{i}"].value = rev
    ws.cells[f"C{i}"].value = exp

chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Quarterly Sales 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"

workbook.save("quarterly_chart.xlsx")

مرحله ۷: ایجاد نمودار خطی

الگوی مشابه برای add_line() کار می‌کند:

from aspose.cells_foss import Workbook, Cell

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

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = [42000, 47500, 53000, 49000, 61000, 68000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Revenue"

for i, (m, r) in enumerate(zip(months, revenue), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = r

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue Trend"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Revenue")
chart.show_legend = True

workbook.save("trend_chart.xlsx")

مشکلات رایج و راه‌حل‌ها

1. نمودار خالی یا تهی به نظر می‌رسد

Cause: محدودهٔ داده‌ای که به n_series.add() ارسال شده است شامل مقادیر نیست، یا رشتهٔ محدودهٔ سلول نادرست است.
Fix: محدودهٔ سلول را بررسی کنید که با داده‌های شما مطابقت داشته باشد. اطمینان حاصل کنید ws.cells["B2"].value برابر با None نیست.

2. برچسب‌های دسته‌بندی در محور x نمایش داده نمی‌شوند

دلیل: chart.category_data تنظیم نشده بود، یا محدوده به سلول‌های خالی اشاره می‌کرد.
راه‌حل: chart.category_data = "A2:A5" را تنظیم کنید جایی که ستون A شامل رشته‌های برچسب شما باشد.

3. همپوشانی موقعیت نمودار با داده‌ها

دلیل: مرزهای سطر در add_bar() با ناحیه داده‌ها همپوشانی دارند.
راه‌حل: نمودار را زیر داده‌ها قرار دهید: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

4. AttributeError: 'ChartCollection' object has no attribute 'add'

دلیل: کتابخانه FOSS از API روش‑به‑نوع استفاده می‌کند، نه add(ChartType.COLUMN, ...).
راه‌حل: از ws.charts.add_bar(...)، ws.charts.add_line(...)، ws.charts.add_pie(...) یا ws.charts.add_area(...) استفاده کنید.


سوالات متداول

کدام انواع نمودار پشتیبانی می‌شوند؟

از add_bar()، add_line()، add_pie()، add_area() و add_stock() برای رایج‌ترین انواع استفاده کنید. این پنج مورد پشتیبانی کامل سریال‌سازی XML دارند. برای فهرست کامل متدهای موجود add_*، کلاس ChartCollection را بررسی کنید.

آیا می‌توانم نمودارها را در یک فایل اکسل موجود ایجاد کنم؟

بله. کتاب کار را با Workbook("existing.xlsx") بارگذاری کنید، به شیت هدف دسترسی پیدا کنید، و با استفاده از روش مناسب ws.charts.add_*() یک نمودار اضافه کنید.

چگونه عنوان نمودار را تنظیم کنم؟

یک رشته ساده اختصاص دهید: chart.title = "My Chart Title". هیچ زیر‑ویژگی .text وجود ندارد: عنوان خود رشته است.

آیا این رویکرد با pandas سازگار است؟

بله. مقادیر DataFrame پانداس را در یک حلقه به سلول‌ها بنویسید، سپس یک نمودار بر روی آن بازه داده اضافه کنید.


منابع مرتبط:

 فارسی