วิธีสร้างแผนภูมิใน Excel ด้วย Python

วิธีสร้างแผนภูมิใน Excel ด้วย Python

แผนภูมิทำให้ข้อมูลสเปรดชีตดิบกลายเป็นข้อมูลเชิงภาพ Aspose.Cells FOSS for Python ช่วยให้คุณสร้างแผนภูมิคอลัมน์, เส้น, แถบ และพายโดยโปรแกรมเมติก พร้อมการควบคุมเต็มรูปแบบเหนือชุดข้อมูล, ป้ายหมวดหมู่, ชื่อแผนภูมิ และตำแหน่ง โดยไม่ต้องใช้ Microsoft Excel.

ทำไมต้องสร้างแผนภูมิด้วย Aspose.Cells FOSS?

  1. No Excel required: สร้างแผนภูมิทั้งหมดด้วย Python บนระบบปฏิบัติการใดก็ได้
  2. Method-per-type API: ใช้ add_bar(), add_line(), add_pie(), add_area(), และอื่น ๆ — หนึ่งเมธอดต่อประเภทแผนภูมิ
  3. Named series: กำหนดค่าซีรีส์แต่ละอันด้วยอาร์กิวเมนต์คีย์เวิร์ด name=, category_data=
  4. 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 ลงในเซลล์ในลูป แล้วเพิ่มแผนภูมิบนช่วงข้อมูลนั้น.


แหล่งข้อมูลที่เกี่ยวข้อง:

 ภาษาไทย