วิธีสร้างแผนภูมิใน Excel ด้วย Python
แผนภูมิทำให้ข้อมูลสเปรดชีตดิบกลายเป็นข้อมูลเชิงภาพ Aspose.Cells FOSS for Python ช่วยให้คุณสร้างแผนภูมิคอลัมน์, เส้น, แถบ และพายโดยโปรแกรมเมติก พร้อมการควบคุมเต็มรูปแบบเหนือชุดข้อมูล, ป้ายหมวดหมู่, ชื่อแผนภูมิ และตำแหน่ง โดยไม่ต้องใช้ Microsoft Excel.
ทำไมต้องสร้างแผนภูมิด้วย Aspose.Cells FOSS?
- No Excel required: สร้างแผนภูมิทั้งหมดด้วย Python บนระบบปฏิบัติการใดก็ได้
- Method-per-type API: ใช้
add_bar(),add_line(),add_pie(),add_area(), และอื่น ๆ — หนึ่งเมธอดต่อประเภทแผนภูมิ - Named series: กำหนดค่าซีรีส์แต่ละอันด้วยอาร์กิวเมนต์คีย์เวิร์ด
name=,category_data= - Precise placement: ควบคุมขอบเขตของแผนภูมิด้วยพิกัดเซลล์ (top_row, left_col, bottom_row, right_col)
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้ง Aspose.Cells FOSS สำหรับ Python
pip install aspose-cells-fossขั้นตอนที่ 2: สร้าง Workbook และใส่ข้อมูล
สร้างเวิร์กบุ๊กใหม่และเขียนข้อมูลเชิงตัวเลขพร้อมป้ายหมวดหมู่ลงในเซลล์:
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ขั้นตอนที่ 3: เพิ่มแผนภูมิคอลัมน์
ใช้ ws.charts.add_bar(top_row, left_col, bottom_row, right_col) เพื่อแทรกแผนภูมิคอลัมน์ วิธีนี้จะคืนค่าอ็อบเจ็กต์แผนภูมิโดยตรง:
##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)ดัชนีแถวและคอลัมน์เริ่มนับจากศูนย์.
ขั้นตอนที่ 4: กำหนดค่าชุดข้อมูล
เพิ่มแต่ละชุดข้อมูลโดยใช้ chart.n_series.add() พร้อมอาร์กิวเมนต์คีย์เวิร์ด:
##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")อาร์กิวเมนต์ category_data ระบุช่วงเซลล์สำหรับป้ายแกน x. อาร์กิวเมนต์ name ตั้งค่าป้ายคำอธิบายชุดข้อมูล.
ขั้นตอนที่ 5: ตั้งชื่อแผนภูมิและข้อมูลประเภท
ตั้งชื่อแผนภูมิเป็นสตริงธรรมดา:
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"ขั้นตอนที่ 6: บันทึกเวิร์กบุ๊ก
workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")ตัวอย่างแผนภูมิคอลัมน์เต็ม:
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")ขั้นตอนที่ 7: สร้างแผนภูมิเส้น
รูปแบบเดียวกันทำงานได้กับ 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")ปัญหาทั่วไปและการแก้ไข
1. แผนภูมิแสดงเป็นสีขาวหรือว่างเปล่า
Cause: ช่วงข้อมูลที่ส่งไปยัง n_series.add() ไม่มีค่า หรือสตริงช่วงเซลล์ไม่ถูกต้อง
Fix: ตรวจสอบว่าช่วงเซลล์ตรงกับข้อมูลของคุณ ตรวจสอบว่า ws.cells["B2"].value ไม่ได้เป็น None
2. ป้ายหมวดหมู่ไม่แสดงบนแกน x
Cause: chart.category_data ไม่ได้ตั้งค่า หรือช่วงอ้างอิงชี้ไปที่เซลล์ว่าง
Fix: ตั้งค่า chart.category_data = "A2:A5" ที่คอลัมน์ A มีสตริงป้ายกำกับของคุณ
3. ตำแหน่งแผนภูมิทับข้อมูล
สาเหตุ: ขอบเขตแถวใน add_bar() ซ้อนกับพื้นที่ข้อมูล.
วิธีแก้: วางแผนภูมิด้านล่างข้อมูล: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).
4. AttributeError: 'ChartCollection' object has no attribute 'add'
สาเหตุ: ไลบรารี FOSS ใช้ API แบบ method-per-type, ไม่ใช่ add(ChartType.COLUMN, ...).
วิธีแก้: ใช้ ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...), หรือ ws.charts.add_area(...).
คำถามที่พบบ่อย
ประเภทแผนภูมิที่รองรับมีอะไรบ้าง?
ใช้ add_bar(), add_line(), add_pie(), add_area(), และ add_stock() สำหรับประเภทที่พบบ่อยที่สุด ทั้งห้าชนิดนี้มีการสนับสนุนการทำ XML serialization อย่างเต็มรูปแบบ ตรวจสอบคลาส ChartCollection เพื่อดูรายการเต็มของเมธอด add_* ที่มีให้.
ฉันสามารถสร้างแผนภูมิในไฟล์ Excel ที่มีอยู่แล้วได้หรือไม่?
ใช่. โหลดเวิร์กบุ๊กด้วย Workbook("existing.xlsx"), เข้าถึงชีตเป้าหมาย, และเพิ่มแผนภูมิโดยใช้เมธอด ws.charts.add_*() ที่เหมาะสม.
ฉันจะตั้งชื่อแผนภูมิอย่างไร?
กำหนดสตริงธรรมดา: chart.title = "My Chart Title". ไม่มีคุณสมบัติย่อย .text: ชื่อเรื่องคือสตริงเอง.
วิธีการนี้เข้ากันได้กับ pandas หรือไม่?
ใช่. เขียนค่าของ pandas DataFrame ลงในเซลล์ในลูป แล้วเพิ่มแผนภูมิบนช่วงข้อมูลนั้น.
แหล่งข้อมูลที่เกี่ยวข้อง: