[ Python ] 신뢰구간 시각화하기 (lineplot or fill_between)

2019. 10. 31. 19:30분석 Python/Visualization

도움이 되셨다면, 광고 한번만 눌러주세요.  블로그 관리에 큰 힘이 됩니다 ^^

시각화를 할 때 신뢰구간을 같이 그려줘야 하는 경우가 있다. 

그때 단순히 선으로 표시를 해줄 수도 있고 영역을 색칠해서 표현하는 경우가 있는데, 여기선 영역을 색칠하는 경우에 대해서 알아보고자 한다.

간편하게 그리는 방법은 lineplot

일일이 그리는 방법 (fill_between) 사용하는 방법이 있다.

seaborn lineplot

timepoint 쌓아 놓으면 안에서 해주는 구조

import numpy as np
import pandas as pd
value = np.random.normal(loc = 0 , scale = 1.0 , size= (10000,1))
event = np.random.randint(0,2 , size = (10000,1))
timepoint = np.random.randint(0,1000, size = (10000,1))

test = pd.DataFrame(np.concatenate((timepoint , event , value),axis =1),
                    columns=["timepoint","event","signal"])

 

fig , ax = plt.subplots(figsize= (15,15))
ax = sns.lineplot(x="timepoint", y="signal",
                  hue="event", style="event", ci = 95 , 
                  markers=False, dashes=False, data=test )

장점 : 간단하고 이쁘게 그려줌

단점 : 다 계산을 해주는 거라서 많아질수록 느림

 


 

그냥 그려주는 경우 fill_between 사용

보여주는 용도이므로 간단하게 진행 개별적으로 값을 먼저 구해놓고 그리기

value = np.random.normal(loc = 0 , scale = 1.0 , size= 1000)
value = np.cumsum(value)
upper = value + np.random.uniform(low = 0 , high = 5 , size= 1000)
lower = value - np.random.uniform(low = 0 , high = 5 , size= 1000)
iteration = np.arange(0,1000)
fig , ax = plt.subplots(figsize=(15,15))
ax.plot(iteration , value, color ="black")
ax.fill_between(iteration , lower , upper ,
                facecolor = "green" , interpolate=True)
ax.plot(iteration , value-10, color ="blue")
ax.fill_between(iteration , lower-10 , upper-10 ,
                facecolor = "red", interpolate=True)

장점 : seabron.lineplot 보다는 더 계산량이 줄어들어서 체감상 느끼는 속도는 더 빠름

단점 : 꾸며야 할 게 많아서 귀찮을 수 있음

728x90