
matplotlib 으로 파이 차트를 그린다. 파이 크기가 작으면 글자가 서로 겹친다. 코파일럿이 제시해 준 방법들을 다 시도했지만 마음에 들지 않았다. adjustText 패키지를 이용하면 편할 것 같았지만, 마음대로 안된다.
이 과정에서 얻은 정보는 유용했다. 직접 안겹치게 코딩했다.
wedges, texts = ax.pie(df['pie'], labels=labels_raw, wedgeprops=dict(width=size, edgecolor='none'), colors=colors)
이 과정으로 texts 정보를 얻는다.
우선 나의 자료는 내림 차순으로 정렬되어 있다. 큰 값들은 겹치지 않게 출력되므로 겹치게 출력되는 작은 크기만 고려한다.
작은 파이가 첫 번째로 나올 때 위치를 기록한다.
init_x, init_y = text.get_position()
이렇게 하면 x, y 값의 좌표가 나온다. x 값은 양수, y 값은 음수였다. 4사분면에 위치함을 의미한다. 처음 값은 그대로 출력한다.
여러 번 반복해서 확인한 결과 나의 파이 차트에서는 2.5도씩 회전하면 가독성이 좋다. 다음을 이용하여 회전한 각도를 지정한다.
theta = np.deg2rad(small_pie * 2.5)
원점을 중심으로 회전한 좌표를 구한다.
x_new = init_x * np.cos(theta) - init_y * np.sin(theta)
y_new = init_x * np.sin(theta) + init_y * np.cos(theta)
새로운 좌표를 지정한다.
text.set_position((x_new, y_new))