Bekerja dengan Diagram

Ikhtisar

Aspose.Cells FOSS menggunakan API metode-per-jenis-grafik. Alih-alih panggilan add(ChartType.X, ...) generik, setiap jenis grafik memiliki metode khususnya sendiri pada koleksi charts worksheet:

MetodeJenis 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

Semua empat parameter posisi menggambarkan area persegi panjang di lembar tempat diagram akan disematkan.
Indeks baris dan kolom bersifat berbasis nol. Setiap metode mengembalikan objek Chart yang dapat Anda konfigurasikan lebih lanjut sebelum disimpan.

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 (misalnya SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) akan memicu NotImplementedError.


Menambahkan Diagram Kolom

Contoh di bawah ini menulis dataset pendapatan-per-produk kecil dan kemudian menambahkan diagram 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 tersebut menempati baris 1–6 (baris berbasis nol 0–5), sehingga top_row=6 menempatkan diagram tepat di bawahnya tanpa menimpa data.


Menambahkan Diagram Garis

Diagram garis bekerja dengan baik untuk menunjukkan tren seiring waktu. Tanda tangan pemanggilan identik dengan add_bar — hanya nama metode 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 Diagram dan Legenda

Atur judul diagram dengan menetapkan string biasa langsung ke chart.title. Properti ini menerima str — jangan mencoba mengakses sub‑properti seperti .title.text, yang tidak ada dalam perpustakaan ini.

##Correct
chart.title = "Quarterly Sales"

##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"

Visibilitas legenda dan posisinya 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 diabaikan ketika legenda disembunyikan.


Konfigurasi Seri Data

Gunakan chart.n_series.add() untuk melampirkan rentang data ke diagram. Berikan semua argumen sebagai keyword arguments untuk menghindari kebingungan urutan posisi:

chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")

Anda dapat menambahkan beberapa seri ke satu diagram dengan memanggil n_series.add 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 secara default:

chart.category_data = "A2:A5"

Data kategori tingkat seri (melalui argumen kata kunci category_data ke n_series.add) menggantikan pengaturan tingkat diagram untuk seri tertentu itu:

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 lebih ringkas. Ketika seri memiliki rentang kategori yang berbeda — misalnya,
dua kumpulan data dengan periode waktu yang berbeda — gunakan argumen kata kunci per-seri
sebagai gantinya.


Penempatan Grafik

Empat parameter posisi pada setiap metode add_* mendefinisikan persegi panjang pembatas di lembar, diukur dalam indeks baris dan kolom berbasis nol:

add_bar(top_row, left_col, bottom_row, right_col)
ParameterMakna
top_rowIndeks berbasis nol dari baris pertama yang ditempati oleh diagram
left_colIndeks berbasis nol dari kolom paling kiri
bottom_rowIndeks berbasis nol dari baris terakhir yang ditempati oleh diagram
right_colIndeks berbasis nol dari kolom paling kanan

Polanya 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 diagram 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

WrongRightWhy
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Jangan panggil ws.charts.add(ChartType.X, ...) secara langsung untuk tipe yang tidak didukung — itu 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 sub‑properti .text.
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) (overlaps data)Letakkan top_row di bawah baris data terakhirDiagram yang menumpang data menyembunyikan nilai dan menyebabkan tata letak yang membingungkan.
chart.legend_position = "bottom" tanpa chart.show_legend = TrueSet chart.show_legend = True firstlegend_position tidak berpengaruh ketika show_legend adalah False.

Lihat Juga

 Bahasa Indonesia