XlsxWriter 소개
XlsxWriter는 Python에서 Excel 파일을 생성하고, 데이터를 작성하며, 산술 연산을 수행하고, 그래프를 그리는 등 다양한 작업을 처리할 수 있는 강력한 라이브러리입니다. 이번 글에서는 XlsxWriter를 활용해 그라데이션 채우기(Gradient Fill) 효과가 적용된 Excel 차트를 만드는 방법을 단계별로 살펴보겠습니다.
아래 예제에서는 두 개의 데이터 계열(Batch 1, Batch 2)에 서로 다른 색상 조합의 그라데이션을 적용한 세로 막대형(column) 차트를 생성합니다.
전체 예제 코드
# xlsxwriter 모듈 임포트
import xlsxwriter
# Workbook()에는 생성할 파일 이름이라는 필수 인자 하나를 전달합니다.
workbook = xlsxwriter.Workbook('chart_gradient1.xlsx')
# 워크북 객체를 통해 add_worksheet() 메서드로 새 워크시트를 추가합니다.
worksheet = workbook.add_worksheet()
# add_format() 메서드로 워크시트 셀의 서식을 지정하는 Format 객체를 생성합니다.
# 여기서는 굵게(bold) 표시하는 형식 객체를 만듭니다.
bold = workbook.add_format({'bold': 1})
# 차트가 참조할 데이터를 워크시트에 추가합니다.
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) 차트 객체를 만듭니다.
chart = workbook.add_chart({'type': 'column'})
# add_series() 메서드로 그라데이션이 적용된 데이터 계열을 차트에 추가합니다.
# 첫 번째 계열을 구성합니다. '=Sheet1!$A$1'은 ['Sheet1', 0, 0]과 동일합니다.
# 참고: '='과 'Sheet1' 사이, 'Sheet1'과 '!' 사이에는 공백을 넣지 않습니다.
# 공백이 들어가면 경고가 발생합니다.
chart.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$B$2:$B$7',
'gradient': {'colors': ['#963735', '#F1DCDB']}
})
# 두 번째 계열도 그라데이션을 포함해 구성합니다.
chart.add_series({
'name': '=Sheet1!$C$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$C$2:$C$7',
'gradient': {'colors': ['#E36C0A', '#FCEADA']}
})
# 차트 제목을 추가합니다.
chart.set_title({'name': '그라데이션 채우기 차트'})
# X축 레이블을 추가합니다.
chart.set_x_axis({'name': '테스트 번호'})
# Y축 레이블을 추가합니다.
chart.set_y_axis({'name': '샘플 길이(mm)'})
# 차트 범례를 표시하지 않습니다.
chart.set_legend({'none': True})
# 지정한 오프셋 값과 함께 차트를 워크시트에 삽입합니다.
# 차트의 왼쪽 위 모서리가 D2 셀에 고정됩니다.
worksheet.insert_chart('D2', chart,
{'x_offset': 25, 'y_offset': 10})
# 마지막으로 close() 메서드를 호출해 Excel 파일을 닫습니다.
workbook.close()
코드 핵심 설명
1. 워크북 및 워크시트 생성
xlsxwriter.Workbook()에 파일 이름을 전달해 새 통합 문서를 만들고, add_worksheet() 메서드로 워크시트를 추가합니다.
2. 데이터 작성
write_row()와 write_column() 메서드를 사용해 헤더와 데이터를 각 행·열에 기록합니다. 이때 미리 생성한 bold 형식 객체를 적용해 헤더를 굵게 표시합니다.
3. 그라데이션 채우기 적용
add_series() 메서드에서 'gradient' 옵션에 colors 리스트를 지정하면 해당 계열의 막대에 그라데이션 효과가 적용됩니다. 첫 번째 계열은 진한 붉은색(#963735)에서 연한 분홍색(#F1DCDB)으로, 두 번째 계열은 주황색(#E36C0A)에서 크림색(#FCEADA)으로 부드럽게 변하는 그라데이션을 사용했습니다.
4. 수식 참조 시 주의사항
'=Sheet1!$B$1'처럼 시트 이름을 참조할 때는 등호(=)와 시트 이름 사이, 시트 이름과 느낌표(!) 사이에 공백이 들어가면 안 됩니다. 공백이 포함되면 경고가 발생하므로 주의해야 합니다.
5. 차트 옵션 설정
set_title(), set_x_axis(), set_y_axis()로 차트 제목과 축 레이블을 지정하고, set_legend({'none': True})로 범례를 숨길 수 있습니다.
6. 차트 삽입 및 저장
insert_chart() 메서드로 차트를 D2 셀에 고정하며, x_offset과 y_offset 옵션으로 세부 위치를 조정합니다. 마지막에는 반드시 close() 메서드를 호출해 Excel 파일을 저장하고 닫아야 변경 사항이 정상적으로 반영됩니다.
실행 결과
위 코드를 실행하면 chart_gradient1.xlsx 파일이 생성됩니다. 파일을 열어 보면 두 데이터 계열이 각각 다른 색상 전환 효과(그라데이션)로 표현된 세로 막대형 차트를 확인할 수 있습니다.