subplot zip을 사용해서 쉽게 나열해서 시각화하기 (seaborn boxplot)

2020. 4. 8. 19:13분석 Python/Visualization

아래 그림처럼 a , a.1 같은 데이터를 다르게 처리한 후 옆에 시각화해서 보고 싶을 때가 있다.
사실 전체 루프를 돌려도 되지만, 쉬운 방법이 있어서 공유한다. 

import matplot.pyplot as plt
pair = list(zip(['a', 'b', 'c', 'd', 'e'],
                ['a.1', 'b.1', 'c.1', 'd.1', 'e.1']))
## 이미지 크기 및 subplots 개수 조절
fig , ax = plt.subplots(len(pair),2,figsize=(5,10))
## 여백 조정
plt.subplots_adjust(left=0.2, bottom=0.05, right=0.99, 
                    top=0.99, wspace=0.6, hspace=0.3)
axes = ax.flatten()
for i , (first , second) in enumerate(zip(axes[::2] , axes[1::2])) :
    first.text(0.5,0.5,s =str(pair[i][0]), fontsize= 20)
    second.text(0.5,0.5, s= str(pair[i][1]), fontsize= 20)
plt.show()

위의 방식을 실제 응용하면 다음과 같다.
밑에 그림에서는 boxplot에서 outlier 처리 전과 후를 비교했다.

import seaborn as sns
pair = list(zip(['수정시가', '수정고가', '수정저가', '수정주가', '수정거래량'],
                ['시가', '고가', '저가', '종가', '거래량']))
fig , ax = plt.subplots(len(pair),2,figsize=(5,10))
plt.subplots_adjust(left=0.2, bottom=0.05, right=0.99, 
                    top=0.99, wspace=0.6, hspace=0.3)
axes = ax.flatten()
for i , (first , second) in enumerate(zip(axes[::2] , axes[1::2])) :
    sns.boxplot(x ="value", y="variable",
                data= pd.melt(data[list(pair[i])]),
                orient ="h", showfliers = False, ax =first)
    sns.boxplot(x ="value", y="variable",
                data= pd.melt(data[list(pair[i])]),
                orient ="h", showfliers = True, ax = second)
plt.savefig("./price_vis.png")
plt.show()

위의 그림처럼 같은 데이터를 다르게 시각화해서 비교해서 보고 싶을 때 유용할 것 같다.

728x90