왜 차트를 프로그래밍 방식으로 만들까요?

자동화된 보고 파이프라인은 종종 분기별 요약, 머신러닝 결과 대시보드, 운영 지표와 같은 차트를 Excel 워크북에 삽입해야 합니다. Microsoft Excel 없이 이를 수행하면 라이선스 비용이 없고 GUI와의 상호작용도 필요하지 않습니다.

Aspose.Cells FOSS for Python 깨끗하고 파이썬스러운 차트 API를 제공합니다: 차트 유형당 하나의 메서드, 제목을 위한 일반 문자열, 그리고 키워드 인수 기반 시리즈 구성. 전체 API는 아래에서 다룹니다.


설치

pip install aspose-cells-foss

필요한 클래스를 가져오세요:

from aspose.cells_foss import Workbook, Cell

차트는 다음을 통해 접근합니다: ws.charts; 별도의 차트 모듈을 import 할 필요가 없습니다.


차트 API 한눈에 보기

원하는 것방법
컬럼 차트 추가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_bar(top_row, left_col, bottom_row, right_col)
파이 차트 추가ws.charts.add_pie(top_row, left_col, bottom_row, right_col)
제목 설정chart.title = "My Chart" (일반 문자열; not .title.text)
x축 카테고리 설정chart.category_data = "A2:A6"
이름이 있는 시리즈 추가chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
범례 표시chart.show_legend = True
범례 위치 설정chart.legend_position = "bottom"

모든 행 및 열 인덱스는 제로 기반. 그 add_* 메서드는 반환합니다 Chart 객체를 직접 반환합니다 (인덱스가 아님).


열 차트: 단계별 안내

분기별 매출 및 비용을 보여주는 열 차트를 만들어 봅시다.

단계 1: 워크북을 생성하고 데이터를 기록합니다

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

##Data
quarters = ["Q1", "Q2", "Q3", "Q4"]
revenue  = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

for i, (q, r, e) in enumerate(zip(quarters, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

단계 2: 차트를 추가합니다

차트를 데이터 아래에 배치합니다 (행 7부터, 열 0-8까지 차지):

chart = ws.charts.add_bar(6, 0, 22, 8)

단계 3: 제목과 범례를 설정합니다

chart.title = "Quarterly Revenue vs Expenses"
chart.show_legend = True
chart.legend_position = "bottom"

단계 4: 데이터 시리즈 추가

각 시리즈는 값 범위, 카테고리 범위 및 이름이 필요합니다:

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")

단계 5: 저장

wb.save("quarterly_report.xlsx")
print("Chart saved to quarterly_report.xlsx")

전체 예제 (한 블록):

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

##Data
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

data = [("Q1", 50000, 32000), ("Q2", 62000, 38000),
        ("Q3", 71000, 41000), ("Q4", 89000, 47000)]
for i, (q, r, e) in enumerate(data, start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Quarterly Revenue 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"

wb.save("quarterly_report.xlsx")

라인 차트: 월별 추세

같은 패턴이 작동합니다 add_line():

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]

months  = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
actuals = [42000, 47500, 53000, 49000, 61000, 68000]
targets = [45000, 45000, 50000, 55000, 60000, 65000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Actual"
ws.cells["C1"].value = "Target"

for i, (m, a, t) in enumerate(zip(months, actuals, targets), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = a
    ws.cells[f"C{i}"].value = t

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue: Actual vs Target"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Actual")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Target")
chart.show_legend = True
chart.legend_position = "right"

wb.save("monthly_trend.xlsx")

파이 차트: 시장 점유율

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]

segments = ["Product A", "Product B", "Product C", "Product D"]
shares   = [40, 25, 20, 15]

ws.cells["A1"].value = "Segment"
ws.cells["B1"].value = "Share %"
for i, (s, v) in enumerate(zip(segments, shares), start=2):
    ws.cells[f"A{i}"].value = s
    ws.cells[f"B{i}"].value = v

chart = ws.charts.add_pie(6, 0, 20, 7)
chart.title = "Market Share by Product"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Share")
chart.show_legend = True
chart.legend_position = "right"

wb.save("market_share.xlsx")

피해야 할 일반적인 실수

잘못맞음
ws.charts.add(ChartType.COLUMN, 5, 0, 15, 5)ws.charts.add_bar(5, 0, 15, 5)
chart.title.text = "Revenue"chart.title = "Revenue"
chart.n_series.add("B2:B5", True) (위치 지정)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartType필요 없음; 사용 ws.charts.add_bar() 직접
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (차트 수준)

리소스