Bekerja dengan Diagram
Gambaran Umum
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) panggilan, setiap tipe diagram memiliki metode khususnya masing‑masing pada worksheet charts koleksi:
| Metode | Tipe diagram |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Kolom berkelompok (diagram batang) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Garis |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Pai |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Area |
Keempat parameter posisi menggambarkan area persegi panjang di lembar tempat diagram akan disematkan. Indeks baris dan kolom adalah berbasis nol. Setiap metode mengembalikan sebuah Chart objek yang dapat Anda konfigurasikan lebih lanjut sebelum menyimpan.
Batasan: Hanya tipe diagram LINE, BAR, PIE, AREA, dan STOCK yang dapat disimpan ke XLSX. Memanggil wb.save() dengan workbook yang berisi tipe diagram lain (mis., SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) akan menimbulkan NotImplementedError.
Menambahkan Grafik Kolom
Contoh di bawah ini menulis dataset pendapatan-per-produk yang kecil dan kemudian menambahkan grafik kolom yang ditempatkan di bawah data.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Data ---
ws.cells["A1"].value = "Product"
ws.cells["B1"].value = "Revenue"
products = ["Widget A", "Widget B", "Widget C", "Widget D", "Widget E"]
revenues = [12_500, 18_200, 9_800, 21_400, 15_600]
for i, (product, revenue) in enumerate(zip(products, revenues), start=2):
ws.cells[f"A{i}"].value = product
ws.cells[f"B{i}"].value = revenue
##--- Chart (rows 7–22, columns A–H, all zero-based) ---
##top_row=6, left_col=0, bottom_row=22, right_col=7
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Revenue by Product"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue (USD)")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("column_chart.xlsx")
print("Saved column_chart.xlsx")Data menempati baris 1–6 (baris berbasis nol 0–5), jadi top_row=6 menempatkan the chart segera di bawah tanpa menimpa data.
Menambahkan Grafik Garis
Bagan garis bekerja dengan baik untuk menunjukkan tren seiring waktu. Tanda tangan pemanggilan adalah identik dengan add_bar — hanya nama metodenya yang berubah.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Monthly trend data ---
ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Page Views"
ws.cells["C1"].value = "Conversions"
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
page_views = [4_200, 5_100, 4_800, 6_300, 7_100, 6_800]
conversions = [ 210, 255, 230, 340, 390, 360]
for i, (month, pv, cv) in enumerate(zip(months, page_views, conversions), start=2):
ws.cells[f"A{i}"].value = month
ws.cells[f"B{i}"].value = pv
ws.cells[f"C{i}"].value = cv
##--- Line chart below the data ---
chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Website Metrics"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Page Views")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Conversions")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("line_chart.xlsx")
print("Saved line_chart.xlsx")Judul Grafik dan Legenda
Atur judul chart dengan menetapkan string biasa secara langsung ke chart.title. Properti properti menerima sebuah str — jangan mencoba mengakses sub-properti seperti .title.text, yang tidak ada dalam pustaka ini.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"Visibilitas dan posisi legenda dikendalikan oleh dua properti:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Untuk menyembunyikan legenda sepenuhnya, atur chart.show_legend = False. Nilai legend_position nilai diabaikan ketika legenda disembunyikan.
Konfigurasi Seri Data
Gunakan chart.n_series.add() untuk melampirkan rentang data ke chart. Lewatkan semua argumen sebagai argumen kata kunci untuk menghindari kebingungan urutan posisi:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Anda dapat menambahkan beberapa seri ke satu grafik dengan memanggil n_series.add lebih lebih dari satu kali. Setiap pemanggilan menambahkan seri baru:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "North"
ws.cells["C1"].value = "South"
ws.cells["D1"].value = "East"
data = [
("Q1", 8_400, 6_100, 7_200),
("Q2", 9_200, 7_400, 8_100),
("Q3", 10_500, 8_900, 9_600),
("Q4", 11_800, 9_300, 10_200),
]
for i, row in enumerate(data, start=2):
ws.cells[f"A{i}"].value = row[0]
ws.cells[f"B{i}"].value = row[1]
ws.cells[f"C{i}"].value = row[2]
ws.cells[f"D{i}"].value = row[3]
chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Regional Sales by Quarter"
chart.n_series.add("B2:B5", category_data="A2:A5", name="North")
chart.n_series.add("C2:C5", category_data="A2:A5", name="South")
chart.n_series.add("D2:D5", category_data="A2:A5", name="East")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("multi_series_chart.xlsx")
print("Saved multi_series_chart.xlsx")Data Kategori
Label kategori dapat diatur pada tingkat bagan atau pada tingkat seri individu.
Data kategori tingkat diagram berlaku untuk semua seri sebagai default:
chart.category_data = "A2:A5"Data kategori tingkat seri (melalui category_data argumen kata kunci ke n_series.add) menggantikan pengaturan tingkat diagram untuk seri spesifik tersebut:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Ketika setiap seri berbagi rentang kategori yang sama, mengatur chart.category_data sekali saja lebih ringkas. Ketika seri memiliki rentang kategori yang berbeda — misalnya, dua set data dengan periode waktu yang berbeda — gunakan argumen kata kunci per-seri sebagai gantinya.
Penempatan Bagan
Empat parameter posisi untuk setiap add_* metode mendefinisikan sebuah kotak pembatas persegi panjang di lembar, diukur dalam indeks baris dan kolom berbasis nol:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Makna |
|---|---|
top_row | Indeks berbasis nol dari baris pertama yang ditempati oleh diagram |
left_col | Indeks berbasis nol dari kolom paling kiri |
bottom_row | Indeks berbasis nol dari baris terakhir yang ditempati oleh diagram |
right_col | Indeks berbasis nol dari kolom paling kanan |
Polanya yang umum adalah menempatkan diagram tepat di bawah data. Jika data Anda berakhir pada baris Excel 6 (indeks baris berbasis nol 5), mulai diagram pada top_row=6:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Data in rows 1–5 (zero-based 0–4)
labels = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]
values = [30, 45, 28, 60, 52]
ws.cells["A1"].value = "Category"
ws.cells["B1"].value = "Score"
for i, (label, val) in enumerate(zip(labels, values), start=2):
ws.cells[f"A{i}"].value = label
ws.cells[f"B{i}"].value = val
##Data ends at zero-based row 5 (Excel row 6).
##Place chart from row 6 to row 22, columns A–H (0–7).
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Category Scores"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Score")
chart.show_legend = False
workbook.save("positioned_chart.xlsx")
print("Saved positioned_chart.xlsx")Buat bagan cukup tinggi agar dapat dibaca: tinggi minimal 15 baris (bottom_row - top_row >= 15) dan lebar minimal 6 kolom merupakan titik awal yang wajar.
Kesalahan Umum
| Salah | Benar | Mengapa |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Jangan panggil ws.charts.add(ChartType.X, ...) langsung untuk tipe yang tidak didukung — akan memunculkan NotImplementedError untuk 11 dari 16 tipe diagram. Gunakan add_bar(), add_line(), add_pie(), add_area(), atau add_stock() sebagai gantinya. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title adalah properti string biasa, bukan objek dengan .text sub-properti. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Parameter kedua dan ketiga harus diberikan sebagai argumen kata kunci untuk menghindari ambiguitas. |
chart = ws.charts.add_bar(0, 0, 15, 7) (menutupi data) | Tempatkan top_row di bawah baris data terakhir | Diagram yang menutupi data menyembunyikan nilai dan menyebabkan tata letak yang membingungkan. |
chart.legend_position = "bottom" tanpa chart.show_legend = True | Setel chart.show_legend = True pertama | legend_position tidak berpengaruh ketika show_legend adalah False. |
Lihat Juga
- Referensi API: Dokumentasi lengkap kelas dan metode untuk
aspose.cells_foss - Basis Pengetahuan: Panduan cara kerja berorientasi tugas
- Gambaran Produk: Ringkasan fitur dan kemampuan
- Memulai / Instalasi: pip install dan penyiapan
- Blog: Python Tutorial Grafik Excel: Panduan pembuatan grafik langkah demi langkah