본문 바로가기
프로젝트

[박스플롯] labels와 positions 크기 호환 안되는 이슈

by 포 키 2023. 9. 18.
728x90

오늘 박스플롯으로 시각화 하는 것이 더 좋다는 피드백을 받고 변경하면서, 이슈가 발생했다.

labels와 positions 크기 호환이 안된다는 문제였는데 이를 해결하는 방법에 대해 간단하게 작성한다.

 

culture_cost_comparison = [culture_cost_2018, culture_cost_2019, culture_cost_2020, culture_cost_2021]
colors = ['red', 'blue', 'green', 'purple']

plt.figure(figsize=(12, 6))

for i, df in enumerate(culture_cost_comparison):
    plt.boxplot(df['평균'], positions=[positions[i]], vert=False, patch_artist=True, boxprops=dict(facecolor=colors[i]))

plt.xlabel('연도')
plt.xticks(positions, labels)
plt.ylabel('관광, 문화 월별 평균 지출값')
plt.title('연도별 관광, 문화 월별 평균 지출값에 대한 박스플롯')
plt.show()

 

이 코드에서 문제가 생겼다.

해결 방법은 코드 두줄만 적어주면 완성된다.

 

culture_cost_comparison = [culture_cost_2018, culture_cost_2019, culture_cost_2020, culture_cost_2021]
colors = ['red', 'blue', 'green', 'purple']
box_width = 0.4

plt.figure(figsize=(12, 6))
positions = range(1, len(culture_cost_comparison) + 1)
labels = [str(year) for year in range(2018, 2022)]

for i, df in enumerate(culture_cost_comparison):
    plt.boxplot(df['평균'], positions=[positions[i]], vert=True, patch_artist=True, boxprops=dict(facecolor=colors[i]), widths=box_width)

plt.xlabel('연도')
plt.xticks(positions, labels)  # 레이블 설정
plt.ylabel('관광, 문화 월별 평균 지출값')
plt.title('연도별 관광, 문화 월별 평균 지출값에 대한 박스플롯')
plt.show()

 

여기서 labels와 positions를 각각 정의해주면 된다.

positions 변수의 경우 박스플롯에서 각 데이터 집합(연도별 비용 데이터 프레임)이 표시될 x축 상의 위치를 설정했다.

ange(1, len(culture_cost_comparison) + 1)는 1부터 culture_cost_comparison 리스트의 길이까지 범위를 생성하며,

이 범위에 따라 데이터 집합들이 x축에 등간격으로 표시된다.

labels 변수는 x축 상에 표시될 레이블을 설정한다.

range(2018, 2022)는 2018부터 2021까지의 범위를 생성하고, for year in range(2018, 2022)를 사용하여 각 연도를 문자열로 변환하고 리스트에 저장한다.

결국 labels 리스트에는 문자열 형태의 연도 레이블이 저장된다.

 

+ 추가로 하나 더 바뀐 부분이 있다.

원래 코드에서는 vert=False였어서 가로형태로 박스플롯이 나왔다면, vert=True로 변경하며 세로형태로 구현했다.

box_width = 0.4, widths=box_width 를 사용해서 박스플롯의 너비를 지정해줬다.

 

 

결과가 잘 나와서 뿌듯하다!

728x90