본문 바로가기
Python - 자동화

[16편] 부서별 차트 색상 자동 지정하기 - 시각적 보고서 품질 향상하기

by ramzee 2025. 5. 16.

1. 왜 이걸 해야 할까?

엑셀 차트를 자동으로 만들었지만, 매출액과 프로젝트 수의 단위 차이 때문에 프로젝트 수 막대가 거의 보이지 않을 수 있습니다.

이럴 때는 보조 축을 사용해 시각적 균형을 맞추고, 각 부서별 색상까지 입혀서 한눈에 들어오는 차트를 완성할 수 있습니다.

✅ 부서별로 차트를 자동 생성하고 ✅ 보조 축 + 색상까지 자동으로 지정해 보고서 품질을 획기적으로 향상시켜 봅시다! ---

2. 사용 라이브러리

pip install pandas xlwings

- pandas: 부서별로 데이터 나누기 - xlwings: 엑셀 차트 조작 (보조 축 + 색상 자동화) ---

3. 실습 목표

  • 엑셀 파일: sample1.xlsx
  • 열: 이름, 부서, 매출액, 프로젝트수 등
  • 목표: 부서별 차트를 자동 생성하고, 색상 + 보조축 적용

---

4. 부서별 색상 지정 예시

{
  '개발부': (102, 153, 255),     # 파랑
  '영업부': (255, 102, 102),     # 빨강
  '재무부': (255, 204, 102),     # 주황
  '인사부': (153, 204, 0),       # 연두
  '기획부': (204, 153, 255)      # 보라
}

---

5. 전체 코드

import pandas as pd
import xlwings as xw

# 1. 파일 경로 설정
file_path = 'C:/Users/YourName/Desktop/엑셀자동화/sample1.xlsx'
save_path = 'C:/Users/YourName/Desktop/엑셀자동화/sample1_부서별차트_색상보조축.xlsx'

# 2. 데이터 불러오기
df = pd.read_excel(file_path)

# 3. 저장용 엑셀 생성
df.to_excel(save_path, index=False)

# 4. 엑셀 앱 실행
app = xw.App(visible=True)
wb = app.books.open(save_path)
sheet = wb.sheets[0]

# 5. 색상 매핑
color_map = {
    '개발부': (102, 153, 255),
    '영업부': (255, 102, 102),
    '재무부': (255, 204, 102),
    '인사부': (153, 204, 0),
    '기획부': (204, 153, 255)
}

# 6. 부서별 차트 생성 및 색상/보조축 설정
start_row = df.shape[0] + 5
for idx, dept in enumerate(df['부서'].unique()):
    temp_df = df[df['부서'] == dept][['이름', '매출액', '프로젝트수']]
    row_offset = start_row + 25 * idx

    sheet.range(f'A{row_offset}').value = temp_df
    data_range = sheet.range(f'A{row_offset}').expand()

    chart = sheet.charts.add()
    chart.chart_type = 'column_clustered'
    chart.set_source_data(data_range)
    chart.top = data_range.top
    chart.left = data_range.left + 350
    chart.width = 420
    chart.height = 300

    try:
        chart_obj = chart.api[0].Chart

        # ✅ 보조축 설정
        chart_obj.SeriesCollection(1).AxisGroup = 1  # 매출액 - 기본축
        chart_obj.SeriesCollection(2).AxisGroup = 2  # 프로젝트수 - 보조축

        # ✅ 색상 설정 (매출액 막대에만 적용)
        rgb = color_map.get(dept, (0, 0, 0))
        chart_obj.SeriesCollection(1).Format.Fill.ForeColor.RGB = rgb[0] + (rgb[1] << 8) + (rgb[2] << 16)

        print(f"🎨 {dept} 차트 생성 및 색상/보조축 적용 완료")
    except Exception as e:
        print(f"⚠️ {dept} 차트 처리 중 오류: {e}")

# 7. 저장 및 종료
wb.save()
wb.close()
app.quit()

print("✅ 모든 부서 차트 자동 생성 및 설정 완료!")

---

6. 실행 결과

- 각 부서별로 차트가 자동 생성됨 - 매출액은 기본 축으로, 프로젝트수는 보조 축으로 표시됨 - 부서마다 정해진 색상이 매출 막대에 적용되어 시각적으로 한눈에 들어옴 ---

7. 실무 팁

  • 시리즈가 많아질 경우, 색상만 달라도 시각적 가독성이 확 올라갑니다.
  • 보조축은 꼭 필요한 경우에만 사용해야 복잡하지 않습니다.