چرا نمودارها را بهصورت برنامهنویسی بسازیم؟?
خطوط لوله گزارشگیری خودکار اغلب به نمودارهای جاسازیشده در کتابهای کار 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) |
| تنظیم دستهبندیهای محور x | chart.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" (سطح نمودار) |
منابع
- Aspose.Cells FOSS for Python: Installation
- راهنمای توسعهدهنده: ایجاد نمودار
- مرجع API: ChartCollection, Chart, NSeries
- پایگاه دانش: نحوه ایجاد نمودارها در Python
- نمای کلی محصول: خلاصه ویژگیها و قابلیتها
- وبلاگ: معرفی Aspose.Cells FOSS: مرور کتابخانه و شروع سریع
- مخزن GitHub