데이터분석/Python matplotlib

<Matplotlib> 선 그래프 사이를 채워서 차이 나타내기

창조적생각 2021. 8. 24. 00:31

 

일반적인 선 그래프에 비해서 평균값과 혹은 선그래프사이의 차이를 채워줌으로써 더욱 전문적인 그래프로 보이게 할 수 있습니다.

 

matplotlib 에서는 fill_between()을 사용하여 공간을 채울 수 있습니다.

 

1. 일반적 선그래프

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from matplotlib import pyplot as plt
 
등급 = [0,1,2,3,4,5,6]
 
맑음_기록 = [103.54,98.87,96.75,92.47,86.85,82.17,75.66]
비_기록 = [114.72,100.10,91.60,90.12,83.63,88.26,80.71]
기록_평균 = 84.78
 
 
 
plt.plot(등급,맑음_기록,label = '맑음_기록',linestyle="--")
 
plt.plot(등급,비_기록,label = '비_기록')
 
 
plt.legend()
plt.title('2019 날씨별 경주기록')
plt.xlabel('등급')
plt.ylabel('기록')
plt.tight_layout()
plt.show()
cs

 

2. 평균값과의 차이를 나타내는 그래프

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from matplotlib import pyplot as plt
 
등급 = [0,1,2,3,4,5,6]
 
맑음_기록 = [103.54,98.87,96.75,92.47,86.85,82.17,75.66]
비_기록 = [114.72,100.10,91.60,90.12,83.63,88.26,80.71]
기록_평균 = 84.78
 
 
plt.plot(등급,맑음_기록,label = '맑음_기록',linestyle="--")
 
 
plt.plot(등급,비_기록,label = '비_기록')
 
plt.fill_between(등급,비_기록,기록_평균,interpolate=True, alpha = 0.25)
 
plt.legend()
plt.title('2019 날씨별 경주기록')
plt.xlabel('등급')
plt.ylabel('기록')
plt.tight_layout()
plt.show()
cs

 

3. 선 그래프들 사이의 공간을 채움

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from matplotlib import pyplot as plt
 
등급 = [0,1,2,3,4,5,6]
 
맑음_기록 = [103.54,98.87,96.75,92.47,86.85,82.17,75.66]
비_기록 = [114.72,100.10,91.60,90.12,83.63,88.26,80.71]
기록_평균 = 84.78
 
 
#plt.plot(등급,맑음_기록)
plt.plot(등급,맑음_기록,label = '맑음_기록',linestyle="--")
 
#plt.plot(등급,비_기록)
plt.plot(등급,비_기록,label = '비_기록')
 
plt.fill_between(등급,비_기록,맑음_기록,interpolate=True, alpha = 0.25)
 
plt.legend()
plt.title('2019 날씨별 경주기록')
plt.xlabel('등급')
plt.ylabel('기록')
plt.tight_layout()
plt.show()
cs

*데이터의 크기가 더 커야 기준선 위 아래의 색을 구분할 수 있습니다.

그래서 부득이하게 다른 그래프로 예시를 보여 드립니다.

 

4.평균값 위 아래 구분

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pandas as pd
from matplotlib import pyplot as plt
data = pd.read_csv('data2.csv')
ages = data['Age']
dev_salaries = data['All_Devs']
py_salaries = data['Python']
js_salaries = data['JavaScript']
 
plt.plot(ages, dev_salaries, color = '#444444',linestyle="--",label='All Devs')
 
plt.plot(ages, py_salaries, label='Python')
 
overall_median = 57287
 
plt.fill_between(ages,py_salaries,overall_median,where=(py_salaries > overall_median)
,interpolate=True, alpha = 0.25)
 
plt.fill_between(ages,py_salaries,overall_median,where=(py_salaries <= overall_median)
,interpolate=True,color = 'red', alpha = 0.25)
 
 
plt.title('Median salary by age')
plt.xlabel('ages')
plt.ylabel('Median salary')
plt.tight_layout()
plt.show()
cs

5. 선그래프 사이의 차이 채움

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pandas as pd
from matplotlib import pyplot as plt
data = pd.read_csv('data2.csv')
ages = data['Age']
dev_salaries = data['All_Devs']
py_salaries = data['Python']
js_salaries = data['JavaScript']
 
plt.plot(ages, dev_salaries, color = '#444444',linestyle="--",label='All Devs')
 
plt.plot(ages, py_salaries, label='Python')
 
overall_median = 57287
 
plt.fill_between(ages,py_salaries,dev_salaries,where=(py_salaries > dev_salaries)
,interpolate=True, alpha = 0.25, label = 'Above Avg')
 
plt.fill_between(ages,py_salaries,dev_salaries,where=(py_salaries <= dev_salaries)
,interpolate=True, alpha = 0.25, label = 'Below Avg')
 
plt.title('Median salary by age')
plt.xlabel('ages')
plt.ylabel('Median salary')
plt.tight_layout()
plt.show()
cs

 

728x90