XlsxWriter 소개
XlsxWriter는 파이썬에서 엑셀(.xlsx) 파일을 생성하고, 데이터를 읽고 쓰고, 산술 연산을 수행하며, 그래프(차트)까지 그릴 수 있게 해주는 강력한 라이브러리입니다. 특히 서로 다른 종류의 차트를 하나로 합친 결합 차트(Combined Chart)도 간단하게 만들 수 있습니다.
결합 차트 그리기 예제
아래 예제에서는 세로 막대형(column) 차트를 기본(primary) 차트로, 꺾은선형(line) 차트를 보조(secondary) 차트로 사용하여 두 차트를 하나로 결합한 뒤 워크시트에 삽입하는 방법을 살펴봅니다.
# xlsxwriter 모듈 임포트
import xlsxwriter
# Workbook()은 필수 인자로 생성할 파일 이름을 받습니다.
workbook = xlsxwriter.Workbook('chart_combined.xlsx')
# add_worksheet() 메서드로 새 워크시트를 추가합니다.
worksheet = workbook.add_worksheet()
# add_format() 메서드로 셀 서식을 지정하는 Format 객체를 생성합니다.
# 여기서는 굵은 글씨(bold) 서식 객체를 만듭니다.
bold = workbook.add_format({'bold': True})
# 차트가 참조할 워크시트 데이터를 준비합니다.
headings = ['Number', 'Batch 1', 'Batch 2']
data = [
[2, 3, 4, 5, 6, 7],
[10, 40, 50, 20, 10, 50],
[30, 60, 70, 50, 40, 30],
]
# 'A1'부터 굵은 글씨 서식으로 제목 행을 작성합니다.
worksheet.write_row('A1', headings, bold)
# 'A2', 'B2', 'C2'부터 각각 한 열씩 데이터를 작성합니다.
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])
# add_chart() 메서드로 워크시트에 추가할 차트 객체를 생성합니다.
# 여기서는 세로 막대형 차트를 만들며, 이것이 기본 차트로 사용됩니다.
column_chart1 = workbook.add_chart({'type': 'column'})
# add_series() 메서드로 차트에 데이터 계열을 추가합니다.
# 첫 번째 계열을 설정합니다.
# '=Sheet1!$A$1'은 ['Sheet1', 0, 0]과 동일한 의미입니다.
# 주의: '='와 시트 이름 사이, 시트 이름과 '!' 사이에는 공백을 넣으면 안 됩니다.
# 공백이 들어가면 경고가 발생합니다.
column_chart1.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$B$2:$B$7',
})
# 꺾은선형 차트를 새로 생성합니다. 이것이 보조 차트로 사용됩니다.
line_chart1 = workbook.add_chart({'type': 'line'})
# 보조 차트의 데이터 계열을 설정합니다.
line_chart1.add_series({
'name': '=Sheet1!$C$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$C$2:$C$7',
})
# 세로 막대형 차트와 꺾은선형 차트를 하나로 결합합니다.
column_chart1.combine(line_chart1)
# 차트 제목을 추가합니다.
column_chart1.set_title({'name': 'Combined chart - same Y axis'})
# X축 레이블을 추가합니다.
column_chart1.set_x_axis({'name': 'Test number'})
# Y축 레이블을 추가합니다.
column_chart1.set_y_axis({'name': 'Sample length (mm)'})
# 지정한 오프셋 값으로 차트를 워크시트에 삽입합니다.
# 차트의 왼쪽 위 모서리가 D2 셀에 고정됩니다.
worksheet.insert_chart('D2', column_chart1, {'x_offset': 25, 'y_offset': 10})
# 마지막으로 close() 메서드로 엑셀 파일을 저장하고 닫습니다.
workbook.close()
코드 단계별 설명
- 워크북 및 워크시트 생성 – Workbook()에 파일 이름을 전달해 새 엑셀 파일을 만들고, add_worksheet()로 워크시트를 추가합니다.
- 데이터 작성 – write_row()로 제목 행을, write_column()으로 각 열의 데이터를 순서대로 작성합니다.
- 기본 차트 생성 – add_chart({'type': 'column'})으로 세로 막대형 차트를 만들고, add_series()로 이름·범주·값을 지정합니다.
- 보조 차트 생성 – add_chart({'type': 'line'})으로 꺾은선형 차트를 만들어 두 번째 데이터 계열을 설정합니다.
- 차트 결합 – combine() 메서드를 호출하면 두 차트가 같은 좌표축을 공유하는 하나의 차트로 합쳐집니다.
- 차트 꾸미기 – set_title(), set_x_axis(), set_y_axis()로 차트 제목과 축 레이블을 지정합니다.
- 차트 삽입 및 저장 – insert_chart()로 D2 셀을 기준으로 x_offset 25, y_offset 10만큼 떨어진 위치에 차트를 배치하고, close()로 파일을 저장·종료합니다.
주의 사항
차트의 name, categories, values에 사용하는 시트 참조 문자열(예: '=Sheet1!$B$1')에는 공백이 포함되어서는 안 됩니다. 등호(=)와 시트 이름 사이, 또는 시트 이름과 느낌표(!) 사이에 공백이 들어가면 경고가 발생하므로 반드시 붙여 써야 합니다.
실행 결과
위 스크립트를 실행하면 chart_combined.xlsx 파일이 생성됩니다. 파일을 열어보면 D2 셀 부근에 Batch 1 데이터를 나타내는 세로 막대형 차트와 Batch 2 데이터를 나타내는 꺾은선형 차트가 같은 Y축을 공유하는 결합 차트 형태로 표시되어 있는 것을 확인할 수 있습니다.