matplotlib 오른쪽 Y축 사용하는이유와 방법

생각하는 마리오네트·2021년 9월 29일
0

Visualization

목록 보기
3/31

먼저 오른쪽에 있는 Y축을 사용하는 이유가 무엇일까요??

위에 보이는 그림은 코로나19로 인해 월별 확진자, 사망자, 회복자의 수를 나타내는 그래프입니다.

그래프를 봤을때 어떤 생각이 드나요??

저는 처음 위의 시각화를 했을때 "뭐지? 사망자는 별로없네??" 라고 생각을 했습니다.

하지만, 데이터프레임을 확인해 보았을때는 미국의 경우 하루 사망률이 14만명이 넘는것으로 나타났습니다.

바로 스케일의 차이 때문에 변화가 없어 보이는 것입니다.

확진자와 회복자의 인원수가 매우 방대하다 보니 사망자 수 역시 적지 않음에도 위와 같은 시각화 결과가 나타난 것입니다. 이것은 실제로 시각화의 함정이기도 합니다. 해당 그래프를 뉴스에 송출한다면 논란이 될 수 있는 그래프입니다.

그렇다면 스케일이 상대적으로 작은 사망자를 따로 분리해서 나타내기에는 비교가 되지않습니다. 이런이유로 오른쪽 Y축을 사용하게 된것입니다.

먼저 오른쪽 Y축을 사용한 그래프를 보여드리겠습니다.

이렇게 사망자의 스케일에 맞는 두번째 Y축을 설정을 하니 사망자의 증가율이 좀 더 가파르다는 것을 알게 되었습니다. 여기서 주의해야할 점은 사망자 수 와 다른 항목과는 스케일이 다르기 때문에 자칫 사망자 수가 확진자 보다 많다는 결론은 피하셔야 합니다.

이렇게 두번째 Y축을 사용함으로서 새롭고 더 현명한 의사결정에 기여할 수 있게 되는 것입니다.

두번째 Y축 사용하는 방법

  • Figure, Axes, Axis의 개념 이해

  • plt.gca()/ plt.gcf()
    Figure에 접근하기 위해서는 plt.gcf()를 사용하고 Axes에 접근하기 위해서는 plt.gca()를 이용 할 수 있다.

우리가 해야할 것은 오른쪽 Y축인 Axis에 접글을 해야한다. 그렇다면 Axes에 접근하여 Axis를 받아와서 조정을 해줄수 있음을 생각해 볼 수 있다.

# subplots만들기
fig, ax = plt.subplots(figsize =(12,6))
sns.lineplot(data = data_status[['Confirmed', 'Recovered']], ax= ax)

# axes, axis 접근
ax = plt.gca()
ymin, ymax = ax.get_ylim()

# ytick와 yticklabel를 만들어 주기위한 설정
custom_ticks = np.linspace(ymin, ymax, 7, dtype = int) 

# ytick 만들기
ax.set_yticks(custom_ticks)

# yticklabel 만들기
ax.set_yticklabels(custom_ticks)

# 범례 추가하기
ax.legend(loc = "left top", markerscale = 2)

### 오른쪽 Y축 설정하기
ax2 = ax.twinx() # twinx함수의 도움으로 두 개의 다른 axes객체를 사용하여 두 개의 다른 Y축으로 플롯을 만들 수 있다.

sns.lineplot(data = date_status['Deaths'],ax= ax2,color = 'red', label = 'Deaths')
# 범례 추가하기
ax2.legend(loc = 'upper right')
plt.show()
profile
문제를해결하는도구로서의"데이터"

0개의 댓글