Cara Membuat Carta dalam Excel dengan Python

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?

  1. No Excel required: Bina carta sepenuhnya dalam Python, pada mana-mana OS.
  2. Method-per-type API: Gunakan add_bar(), add_line(), add_pie(), add_area(), dan lain-lain — satu kaedah bagi setiap jenis carta.
  3. Named series: Konfigurasikan setiap siri dengan argumen kata kunci name=, category_data=.
  4. 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-foss

Langkah 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 = 47000

Langkah 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:

 Bahasa Melayu