Cara Membuat Carta dalam Excel dengan Python
Grafik menukar data hamparan mentah menjadi wawasan visual. Aspose.Cells FOSS for Python membolehkan anda mencipta carta lajur, garis, bar, dan pai secara programatik, dengan kawalan penuh ke atas siri data, label kategori, tajuk carta, dan kedudukan, tanpa memerlukan Microsoft Excel.
Mengapa Membuat Carta dengan Aspose.Cells FOSS?
- No Excel required: Bina carta sepenuhnya dalam Python, pada mana-mana OS.
- Method-per-type API: Gunakan
add_bar(),add_line(),add_pie(),add_area(), dan lain-lain — satu kaedah bagi setiap jenis carta. - Named series: Konfigurasikan setiap siri dengan argumen kata kunci
name=,category_data=. - Precise placement: Kawal sempadan carta dengan koordinat sel (top_row, left_col, bottom_row, right_col).
Panduan Langkah demi Langkah
Langkah 1: Pasang Aspose.Cells FOSS untuk Python
pip install aspose-cells-fossLangkah 2: Cipta Buku Kerja dan Isi Data
Buat buku kerja baru dan tulis data berangka serta label kategori ke dalam sel:
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 = 47000Langkah 3: Tambah Carta Lajur
Gunakan ws.charts.add_bar(top_row, left_col, bottom_row, right_col) untuk menyisipkan carta lajur. Kaedah ini mengembalikan objek carta secara langsung:
##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)Indeks baris dan lajur bermula dari sifar.
Langkah 4: Konfigurasikan Siri Data
Tambah setiap siri data menggunakan chart.n_series.add() dengan argumen kata kunci:
##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")Argumen category_data menentukan julat sel untuk label paksi‑x. Argumen name menetapkan label legenda siri.
Langkah 5: Tetapkan Tajuk Carta dan Data Kategori
Tetapkan tajuk carta sebagai rentetan biasa:
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"Langkah 6: Simpan Buku Kerja
workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")Contoh carta lajur lengkap:
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")Langkah 7: Buat Carta Garis
Corak yang sama berfungsi untuk 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")Masalah Umum dan Penyelesaian
1. Carta kelihatan kosong atau tiada
Cause: Julat data yang dihantar kepada n_series.add() tidak mengandungi nilai, atau rentetan julat sel tidak betul.
Fix: Sahkan bahawa julat sel sepadan dengan data anda. Periksa ws.cells["B2"].value bukan None.
2. Label kategori tidak dipaparkan pada paksi x
Punca: chart.category_data tidak ditetapkan, atau julat menunjuk kepada sel kosong.
Penyelesaian: Tetapkan chart.category_data = "A2:A5" di mana lajur A mengandungi rentetan label anda.
3. Kedudukan carta bertindih data
Punca: Sempadan baris dalam add_bar() bertindih dengan kawasan data.
Pembaikan: Letakkan carta di bawah data: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).
4. AttributeError: 'ChartCollection' object has no attribute 'add'
Punca: Perpustakaan FOSS menggunakan API kaedah-per-jenis, bukan add(ChartType.COLUMN, ...).
Pembaikan: Gunakan ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...), atau ws.charts.add_area(...).
Soalan Lazim
Apakah jenis carta yang disokong?
Gunakan add_bar(), add_line(), add_pie(), add_area(), dan add_stock() untuk jenis yang paling umum. Lima ini mempunyai sokongan penserialan XML penuh. Semak kelas ChartCollection untuk senarai lengkap kaedah add_* yang tersedia.
Bolehkah saya membuat carta dalam fail Excel yang sedia ada?
Ya. Muat buku kerja dengan Workbook("existing.xlsx"), akses helaian sasaran, dan tambahkan carta menggunakan kaedah ws.charts.add_*() yang sesuai.
Bagaimana saya menetapkan tajuk carta?
Berikan rentetan biasa: chart.title = "My Chart Title". Tiada sub-sifat .text: tajuknya ialah rentetan itu sendiri.
Adakah pendekatan ini serasi dengan pandas?
Ya. Tulis nilai pandas DataFrame ke sel dalam gelung, kemudian tambahkan carta atas julat data tersebut.
Sumber Berkaitan: