반응형
다음과 같은 설문데이터가 있습니다.
시각화를 해 보고 싶은데 일반적인 누적막대로는 행간의 차이가 뭐랄까
극적이지 않습니다.
그래서 경계선으로 정렬해서 좌우로 튀어나오게 아래와 같은 차트를 만들어 보고 싶었습니다.
가장 자주 사용하는 "수업 안내"의 점유율이 높다는 정보가
시각적으로 훨씬 더 두드러지는 느낌입니다.
재미있게도 위 이미지는 아래아한글 표로 직접 만든 차트입니다.
구현을 고민하는 데 시간이 많이 들기는 했지만
코드 자체는 길지 않을뿐더러, 생각보다 간단합니다.
코드와 시연화면을 보여드리겠습니다.
파이썬 코드
import os
from time import sleep
import win32com.client as win32
import pandas as pd
def shift(percent, direction):
percent -= 50
percent = int(percent / 1.7)
hwp.HAction.Run("TableCellBlock")
for i in range(abs(percent)):
sleep(0.01)
if direction == "left":
if percent < 0:
hwp.HAction.Run("TableResizeCellRight")
else:
hwp.HAction.Run("TableResizeCellLeft")
elif direction == "right":
if percent < 0:
hwp.HAction.Run("TableResizeCellLeft")
else:
hwp.HAction.Run("TableResizeCellRight")
else:
pass
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
hwp.Run("FileNew")
hwp.Open(os.path.join(os.getcwd(), "./학습양식의_활용_샘플.hwp"))
df = pd.read_excel("./학습양식의_활용_자료_샘플.xlsx")
sleep(3)
field_list = [i for i in hwp.GetFieldList().split('\x02') if not i.isdigit()]
for i in field_list:
if i.endswith('-'):
hwp.PutFieldText(i, str(int(df[df["구분"] == i[:-1]]["사용안함/거의안함(%)"])) + "%")
else:
hwp.PutFieldText(i, str(int(df[df["구분"] == i[:-1]]["가끔사용/자주사용(%)"])) + "%")
for i in range(2*len(df)):
if i < len(df):
hwp.MoveToField(str(i))
shift(df.iloc[i]["사용안함/거의안함(%)"], "left")
else:
hwp.MoveToField(str(i))
shift(df.iloc[i-len(df)]["가끔사용/자주사용(%)"], "right")
print("완료되었습니다.")
파이썬이나 판다스 데이터프레임에 익숙하신 분들을 대상으로 하는 참고용 포스팅이므로
설명은 생략합니다.
시연화면
이렇게 템플릿을 거의 만들어두고, 엑셀파일의 정보를 통해 필드와 셀너비 조절 정도만 조작하면
제법 괜찮은 차트를 빠르게 뽑아낼 수 있겠습니다.
로컬에서 직접 실행해보고 싶은 분들을 위해
코드와 한/글 파일도 아래 첨부해 둡니다.
마치며
회사에서, 또 강의를 위해 차트를 만들 때에는 엑셀보다는 matplotlib을 사용하려고 의식적으로 노력했습니다.
도구를 탓할 수는 없는 노릇이지만, 제겐 matplotlib이 상당히 어렵게 느껴졌습니다. 사실 지금도 그렇고요.
그나마 matplotlib을 쓸 수 있게 실낱같은 희망을 주신 분이 있는데
바로 한국에너지기술연구원의 이제현님입니다. 이 분은 정말 우리나라 최고의 matplotlib 장인이라고 생각됩니다.
제현님의 블로그를 링크로 달아둡니다.
행복한 하루 되세요!
국내 유일의 파이썬+한컴오피스 업무자동화 입문강의
반응형
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
모든 날짜 문자열 끝에 요일 붙이기 (1) | 2022.12.20 |
---|---|
한/글 프로그램 없이 hwp->pdf 변환하기 (0) | 2022.12.18 |
[QnA] 그림개체의 개체설명문 가져오기 (0) | 2022.12.10 |
댓글