본문 바로가기
IT 실무

[파이썬] AxesSubplot 에서 bar(Rectangle) 추출하기

by 아이들링 2020. 8. 2.

파이썬(Python)에서 바 그래프에서 바에 색깔을 입히거나 라벨링 등을 하려고 하려면 그래프를 구성하는 바를 반복문으로 돌려 처리하곤 한다. 예를 들면 아래와 같은 식이다.

 

bars = plt.bar(index, dfdate)
   
for rect in bars:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width()/2.0, height+20, '%d' % int(height), ha='center', va='bottom')
             
plt.title("제목", fontsize=20)
plt.show()

 

위의 예시에서 bars는 BarContainer이므로, 반복문을 통해 bar를 하나씩 뽑아낼 수 있다.

그런데 위의 예시와 달리, 그래프를 그리는 방식이나 라이브러리에 따라 가지고 있는 객체가 AxesSubplot인 경우가 있다. 아래와 같은 경우다.

 

ax = sns.countplot(x=col, data=targetData, ax=ax1)
for rect in ax:
    # do something with rect
    
'''
TypeError: 'AxesSubplot' object is not iterable
'''

 

이 경우 반복문을 통해 bar를 얻어내려고 하면 에러가 난다.

이런 경우 아래와 같이 bar를 추출해서 사용할 수 있다.

ax = sns.countplot(x=col, data=targetData, ax=ax1)
bars = [rect for rect in ax.get_children() if isinstance(rect, mpl.patches.Rectangle)]
for rect in bars:
    # do something with rect

댓글0