본문 바로가기
프로그래밍/Python

Python_openpyxl_엑셀_05_차트_영역,막대

by Choraengyi 2021. 2. 6.

1. 영역 차트

chart = AreaChart()

from openpyxl import Workbook
from openpyxl.chart import AreaChart, Reference # 영역 차트 그리기 위한 모듈 추가

wb = Workbook()
ws = wb.active

rows = [        # 데이터 추가, 일별 상품 A 및 B 의 이익 데이터
    ['일수', 'A 이익', 'B 이익'],
    [1, 8000, 6000],
    [2, 9000, 4000],
    [3, 10000, 5000],
    [4, 9000, 7000],
    [5, 10000, 1000],
    [6, 5000, 2000],
    [7, 10000, 6000],
    [8, 8000, 5000],
]

for row in rows:    # 위의 데이터(rows) 엑셀에 추가
    ws.append(row)

chart = AreaChart() # 영역 차트 추가
chart.title = "A 물건, B 물건 이익 비교_영역차트"   # 차트 제목
chart.style = 2 # 차트 스타일 지정
chart.x_axis.title = "일수"    # 차트 x축 타이틀 지정
chart.y_axis.title = "이익 금액"    # 차트 y축 타이틀 지정

cats = Reference(ws, min_col=1, min_row=2, max_row=9)   # 1열 2행부터 1열 9행의 데이터 cats 변수로, 일수 데이터
data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=9)    # 2열 부터 3열, 1행 부터 9행 데이터 data 변수로, 금액 데이터
chart.add_data(data, titles_from_data=True) # data 변수를 차트 데이터로 삽입, titles_from_data -> 데이터의 타이틀 표시 -> A이익, B이익 표시됨(범례)
chart.set_categories(cats)  # cats 데이터를 차트 카테고리로 삽입

ws.add_chart(chart, "E1")   # 차트 E1 위치에 생성
wb.save("sample_chart.xlsx")

- 결과

 

3D 영역 차트

AreaChart -> AreaChart3D 로 변경

from openpyxl import Workbook
#from openpyxl.chart import AreaChart, Reference # 영역 차트 그리기 위한 모듈 추가
from openpyxl.chart import AreaChart3D, Reference # 3D 영역 차트 그리기 위한 모듈 추가

wb = Workbook()
ws = wb.active

rows = [        # 데이터 추가, 일별 상품 A 및 B 의 이익 데이터
    ['일수', 'A 이익', 'B 이익'],
    [1, 8000, 6000],
    [2, 9000, 4000],
    [3, 10000, 5000],
    [4, 9000, 7000],
    [5, 10000, 1000],
    [6, 5000, 2000],
    [7, 10000, 6000],
    [8, 8000, 5000],
]

for row in rows:    # 위의 데이터(rows) 엑셀에 추가
    ws.append(row)

# chart = AreaChart() # 영역 차트 추가
chart = AreaChart3D() # 3D 영역 차트 추가
chart.title = "A 물건, B 물건 이익 비교_영역차트"   # 차트 제목
chart.style = 2 # 차트 스타일 지정
chart.x_axis.title = "일수"    # 차트 x축 타이틀 지정
chart.y_axis.title = "이익 금액"    # 차트 y축 타이틀 지정

cats = Reference(ws, min_col=1, min_row=2, max_row=9)   # 1열 2행부터 1열 9행의 데이터 cats 변수로, 일수 데이터
data1 = Reference(ws, min_col=3, min_row=1, max_col=3, max_row=9)    # 3열, 1행 부터 9행 데이터 data 변수로, 금액 데이터
data2 = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=9)    # 2열, 1행 부터 9행 데이터 data 변수로, 금액 데이터
chart.add_data(data1, titles_from_data=True) # data1 변수를 차트 데이터로 삽입,B 이익 
chart.add_data(data2, titles_from_data=True) # data2 변수를 차트 데이터로 삽입,A 이익
chart.set_categories(cats)  # cats 데이터를 차트 카테고리로 삽입

ws.add_chart(chart, "E1")   # 차트 E1 위치에 생성
wb.save("sample_chart.xlsx")

- 결과

 

2. 막대 차트

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference  # 막대 차트 그리기 위한 모듈 추가

wb = Workbook()
ws = wb.active

rows = [        # 데이터 추가, 일별 상품 A 및 B 의 이익 데이터
    ['일수', 'A 이익', 'B 이익'],
    [1, 8000, 6000],
    [2, 9000, 4000],
    [3, 10000, 5000],
    [4, 9000, 7000],
    [5, 10000, 1000],
    [6, 5000, 2000],
    [7, 10000, 6000],
    [8, 8000, 5000],
]

for row in rows:    # 위의 데이터(rows) 엑셀에 추가
    ws.append(row)

##막대 차트1_기본형
chart1 = BarChart()
chart1.type = "col" # 세로 막대
chart1.style = 2    # 차트 색상 변경
chart1.title = "기본 막대 그래프"
chart1.y_axis.title = "일수"
chart1.x_axis.title = "이익 금액"

cats = Reference(ws, min_col=1, min_row=2, max_row=9)   # 1열 2행부터 1열 9행의 데이터 cats 변수로, 일수 데이터
data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=9)    # 2열 부터 3열, 1행 부터 9행 데이터 data 변수로, 금액 데이터
chart1.add_data(data, titles_from_data=True) # data 변수를 차트 데이터로 삽입,B 이익 
chart1.set_categories(cats)  # cats 데이터를 차트 카테고리로 삽입
ws.add_chart(chart1, "A11")

wb.save("sample_chart.xlsx")

- 결과

 

가로 막대 차트

# 위 막대 차트 코드에 추가로 작성
from copy import deepcopy   # 객체를 복사, 객체 간 영향 없음, 객체를 복사하여 별도의 새로운 객체를 생성한다고 보면됨

chart2 = deepcopy(chart1)   # chart1 을 복사해 새로운 chart2 생성, 두 객체 간 서로 영향 받지 않음
chart2.style = 2
chart2.type = "bar" # 가로 막대
chart2.title = "가로 막대 차트"
ws.add_chart(chart2, "J11")

- 결과

 

스택형 세로 막대 차트

# 위 막대 차트 코드에 추가로 작성
chart3 = deepcopy(chart1)   # chart1 을 복사해 새로운 chart3 생성, 두 객체 간 서로 영향 받지 않음
chart3.style = 2
chart3.type = "col" # 세로 막대
chart3.grouping = "stacked" # 스택형 세로 막대
chart3.title = "스택형 세로 막대 차트"
ws.add_chart(chart3, "A25")

- 결과

더보기

A 와 B 의 막대가 다른 선상에 출력됨

 

해당 코드 추가

chart3.overlap = 100    # 두 막대 그래프 오버랩 수치 조정

 

퍼센트 스택형 가로 막대 차트

chart4 = deepcopy(chart1)   # chart1 을 복사해 새로운 chart4 생성, 두 객체 간 서로 영향 받지 않음
chart4.style = 2
chart4.type = "bar" # 가로 막대
chart4.grouping = "percentStacked" # 퍼센트 스택형 가로 막대
chart4.overlap = 100
chart4.title = "퍼센트 스택형 가로 막대 차트"
ws.add_chart(chart4, "J25")

 - 결과

 

3D 막대 그래프

#위 코드에서 해당 3D 만 추가해주면 됨
#from openpyxl.chart import BarChart, Reference  # 막대 차트 그리기 위한 모듈 추가
from openpyxl.chart import BarChart3D, Reference  # 3D 막대 차트 그리기 위한 모듈 추가

#chart1 = BarChart()
chart1 = BarChart3D()

- 결과

 

 

#참고 : https://openpyxl.readthedocs.io/

728x90
반응형

댓글