차트 작업
개요
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행(제로 기반 행 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 한 번만 지정하면 더 간결합니다. 시리즈마다 다른 카테고리 범위가 있을 경우 — 예를 들어, 시간 기간이 다른 두 데이터셋 — per-series 키워드 인수를 사용하십시오 대신에.
차트 위치 지정
모든 메서드에 대한 네 개의 위치 매개변수는 add_* 메서드가 경계 시트 내 사각형을 정의하고, 0 기반 행 및 열 인덱스로 측정됩니다:
add_bar(top_row, left_col, bottom_row, right_col)| 매개변수 | 의미 |
|---|---|
top_row | 차트가 차지하는 첫 번째 행의 0 기반 인덱스 |
left_col | 왼쪽 가장 열의 0 기반 인덱스 |
bottom_row | 차트가 차지하는 마지막 행의 0 기반 인덱스 |
right_col | 오른쪽 가장 열의 0 기반 인덱스 |
일반적인 패턴은 차트를 데이터 바로 아래에 배치하는 것입니다. 데이터가 Excel 행 6(0 기반 행 인덱스 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 16가지 차트 유형 중 11가지에 대해. 사용 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 설치 및 설정
- 블로그: Python Excel 차트 튜토리얼: 단계별 차트 생성 가이드