ทำงานกับแผนภูมิ
ภาพรวม
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) เมื่อเรียก, แต่ละประเภทของแผนภูมิมีเมธอดเฉพาะของตนบน ของแผ่นงาน charts คอลเลกชัน:
| เมธอด | ประเภทแผนภูมิ |
|---|---|
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_pie(top_row, left_col, bottom_row, right_col) | พาย |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | พื้นที่ |
พารามิเตอร์ตำแหน่งสี่ตัวทั้งหมดอธิบายพื้นที่สี่เหลี่ยมในแผ่นงานที่ แผนภูมิจะถูกฝังอยู่. ดัชนีแถวและคอลัมน์เป็น เริ่มจากศูนย์. แต่ละ เมธอดจะคืนค่า Chart อ็อบเจ็กต์ที่คุณสามารถกำหนดค่าเพิ่มเติมก่อนบันทึก.
ข้อจำกัด: สามารถบันทึกประเภทแผนภูมิ LINE, BAR, PIE, AREA, และ STOCK ลงในไฟล์ XLSX ได้เท่านั้น การเรียก wb.save() กับสมุดงานที่มีประเภทแผนภูมิอื่นใด (เช่น SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) จะทำให้เกิด NotImplementedError.
การเพิ่มแผนภูมิคอลัมน์
ตัวอย่างด้านล่างเขียนชุดข้อมูลรายได้ตามผลิตภัณฑ์ขนาดเล็กแล้วเพิ่มแผนภูมิคอลัมน์ที่วางอยู่ด้านล่างข้อมูล.
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")ข้อมูลครอบคลุมแถวที่ 1â–6 (zero-based rows 0â–5), ดังนั้น top_row=6 วาง แผนภูมิที่อยู่ด้านล่างโดยตรงโดยไม่ทับซ้อนข้อมูล.
การเพิ่มแผนภูมิเส้น
แผนภูมิเส้นทำงานได้ดีสำหรับการแสดงแนวโน้มตามเวลา. ลายเซ็นการเรียกคือ เหมือนกับ add_bar — ชื่อเมธอดเท่านั้นที่เปลี่ยน.
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")ชื่อแผนภูมิและคำอธิบาย
ตั้งชื่อแผนภูมิโดยการกำหนดสตริงธรรมดาโดยตรงให้กับ chart.title. ตัว คุณสมบัติรับค่าเป็น str — อย่าพยายามเข้าถึงคุณสมบัติเสียย่อยเช่น .title.text, ซึ่งไม่มีอยู่ในไลบรารีนี้.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"การแสดงและตำแหน่งของคำอธิบายถูกควบคุมโดยสองคุณสมบัติ:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"เพื่อซ่อนคำอธิบายภาพทั้งหมด, ตั้งค่า chart.show_legend = False. ตัว legend_position ค่าจะถูกละเว้นเมื่อคำอธิบายภาพถูกซ่อน.
การกำหนดค่าชุดข้อมูล
ใช้ chart.n_series.add() เพื่อแนบช่วงข้อมูลไปยังแผนภูมิ. ส่งผ่านทั้งหมด อาร์กิวเมนต์เป็น คีย์เวิร์ดอาร์กิวเมนต์ เพื่อหลีกเลี่ยงความสับสนของลำดับตำแหน่ง:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")คุณสามารถเพิ่มหลายชุดข้อมูลลงในแผนภูมิเดียวได้โดยการเรียก n_series.add เพิ่มเติม กว่าหนึ่งครั้ง แต่ละครั้งที่เรียกจะเพิ่มชุดข้อมูลใหม่เข้าไป:
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")ข้อมูลประเภท
ป้ายกำกับหมวดหมู่สามารถตั้งได้ระดับแผนภูมิหรือระดับชุดข้อมูลแต่ละชุด.
ข้อมูลหมวดหมู่ระดับแผนภูมิ ใช้กับทุกซีรีส์เป็นค่าเริ่มต้น:
chart.category_data = "A2:A5"ข้อมูลหมวดหมู่ระดับซีรีส์ (ผ่าน category_data อาร์กิวเมนต์คีย์เวิร์ดของ n_series.add) จะทับค่าการตั้งค่าระดับแผนภูมิสำหรับซีรีส์นั้นโดยเฉพาะ:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")เมื่อทุกซีรีส์ใช้ช่วงหมวดหมู่เดียวกัน การตั้งค่า chart.category_data ครั้งเดียวจะกระชับกว่า เมื่อซีรีส์มีช่วงหมวดหมู่ที่แตกต่าง — ตัวอย่างเช่น, สองชุดข้อมูลที่มีช่วงเวลาต่างกัน — ใช้อาร์กิวเมนต์คีย์เวิร์ดต่อซีรีส์ แทน.
การวางตำแหน่งแผนภูมิ
พารามิเตอร์ตำแหน่งสี่ตัวของทุก add_* เมธอดจะกำหนดกรอบ สี่เหลี่ยมในชีต โดยวัดจากดัชนีแถวและคอลัมน์ที่เริ่มจากศูนย์:
add_bar(top_row, left_col, bottom_row, right_col)| พารามิเตอร์ | ความหมาย |
|---|---|
top_row | ดัชนีเริ่มจากศูนย์ของแถวแรกที่แผนภูมิครอบครอง |
left_col | Zero-based index ของคอลัมน์ซ้ายสุด |
bottom_row | Zero-based index ของแถวสุดท้ายที่แผนภูมิครอบครอง |
right_col | Zero-based index ของคอลัมน์ขวาสุด |
รูปแบบทั่วไปคือการวางแผนภูมิไว้ด้านล่างข้อมูลโดยตรง หากข้อมูลของคุณ สิ้นสุดที่แถว Excel แถวที่ 6 (ดัชนีแถวเริ่มจากศูนย์คือ 5), เริ่มแผนภูมิที่ 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")ทำให้แผนภูมิสูงพอที่จะอ่านได้: ความสูงอย่างน้อย 15 แถว (bottom_row - top_row >= 15) และความกว้างอย่างน้อย 6 คอลัมน์เป็นจุดเริ่มต้นที่สมเหตุสมผล.
ข้อผิดพลาดทั่วไป
| ผิด | ถูก | ทำไม |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | ห้ามเรียก ws.charts.add(ChartType.X, ...) โดยตรงสำหรับประเภทที่ไม่รองรับ — จะทำให้เกิดข้อผิดพลาด NotImplementedError สำหรับ 11 จาก 16 ประเภทแผนภูมิ ใช้ add_bar(), add_line(), add_pie(), add_area(), หรือ add_stock() แทน. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title เป็นคุณสมบัติแบบสตริงธรรมดา ไม่ใช่วัตถุที่มี .text คุณสมบัติเสียย่อย. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | พารามิเตอร์ที่สองและที่สามต้องส่งเป็นอาร์กิวเมนต์แบบคีย์เวิร์ดเพื่อหลีกเลี่ยงความกำกวม. |
chart = ws.charts.add_bar(0, 0, 15, 7) (ทับข้อมูล) | วาง top_row ด้านล่างแถวข้อมูลสุดท้าย | แผนภูมิที่ทับข้อมูลจะบังค่าต่าง ๆ และทำให้การจัดวางสับสน. |
chart.legend_position = "bottom" โดยไม่มี chart.show_legend = True | ตั้งค่า chart.show_legend = True แรก | legend_position ไม่มีผลเมื่อ show_legend คือ False. |
ดูเพิ่มเติม
- อ้างอิง API: เอกสารคลาสและเมธอดเต็มสำหรับ
aspose.cells_foss - ฐานความรู้: คู่มือวิธีทำที่มุ่งเน้นงาน
- ภาพรวมผลิตภัณฑ์: สรุปคุณลักษณะและความสามารถ
- เริ่มต้นใช้งาน / การติดตั้ง: pip install และการตั้งค่า
- บล็อก: Python Excel Chart Tutorial: คู่มือการสร้างแผนภูมิแบบขั้นตอนต่อขั้นตอน