데이터분석/Python matplotlib

Python matplotlib 사용하기 2. 막대 그래프

창조적생각 2021. 8. 8. 11:28

1. 막대그래프 기본적인 사용법

 

2. 2개 이상의 막대그래프 그리기

 

 

 

1. 막대그래프 기본적인 사용법

1
2
3
4
5
6
7
8
9
10
11
12
13
from matplotlib import pyplot as plt
plt.style.use("fivethirtyeight")
ages_x = []
for i in range(25,36):
    ages_x.append(i)
dev_y = [38496420004675249320532005600062316,64928673176874873752]
plt.bar(ages_x,dev_y, label = "All Devs")
plt.legend()
plt.title("Median Salary (usd) by age")
plt.xlabel("ages")
plt.ylabel("median salary(usd)")
 
plt.show()
cs

기본적으로 선그래프를 그리는 법과 유사합니다. 

다른 점이 있다면 선그래프는 plt.plot()을 쓰고 막대 그래프는 plt.bar()를 쓴다는 점입니다.

그 외에는 두개의 데이터 집합을 쓴다는 점과 라벨다는 것 제목다는 것까지 모두 동일합니다.

 

[실행결과]

* 현재는 주피터 노트북이 아니라 비쥬얼 스튜디오를 사용하고 있습니다.

 

비쥬얼 스튜디오를 사용할 때 위의 실행결과처럼 화면이 다 나오지 않는 경우가 있습니다.

 

그럴 경우에는 plt.tight_layout()를 사용해주시면 화면안에 모든 자료가 출력이 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
from matplotlib import pyplot as plt
plt.style.use("fivethirtyeight")
ages_x = []
for i in range(25,36):
    ages_x.append(i)
dev_y = [38496420004675249320532005600062316,64928673176874873752]
plt.bar(ages_x,dev_y, label = "All Devs")
plt.legend()
plt.title("Median Salary (usd) by age")
plt.xlabel("ages")
plt.ylabel("median salary(usd)")
plt.tight_layout()
plt.show()
cs

[실행결과]

 

2. 두개 이상의 바그래프 한 화면에 그리는 방법

 

바그래프는 선그래프처럼 단순하게 두 그래프를 한번에 넣는다고 두개가 동시에 화면에 나오지 않고 겹쳐집니다.

그렇기때문에 몇가지 추가적인 작업이 필요합니다.

numpy 라이브러리를 추가로 가져옵니다.

numpy는 리스트 안의 인덱스들에 일괄적인 계산이 가능합니다. 그렇기에 바그래프가 겹치지 않게 출력되는데 반드시 필요합니다.

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
from matplotlib import pyplot as plt
import numpy as np
plt.style.use("fivethirtyeight")
ages_x = []
for i in range(25,36):
    ages_x.append(i)
print(ages_x)
 
x_indexes = np.arange(len(ages_x))
width = 0.25
print(x_indexes)
 
dev_y = [38496420004675249320532005600062316,64928673176874873752]
plt.bar(x_indexes - width,dev_y,width=width, label = "All Devs")
 
py_y =[4537248876538505728763016659987000370000714967537083640]
plt.bar(x_indexes,py_y,width=width, label = "python")
print(x_indexes - width)
plt.legend()
plt.xticks(ticks=x_indexes, labels=ages_x)
plt.title("Median Salary (usd) by age")
plt.xlabel("ages")
plt.ylabel("median salary(usd)")
plt.tight_layout()
plt.show()
 
cs

 

9열에 np로 불러온 numpy를 이용해 ages_x의 길이만큼을 가지는 1~10까지의 리스트를 x_indexes 에 저장합니다.

 

그리고 width를 0.25로 지정해줍니다. width의 수치는 원하는 만큼의 간격을 위해 하고 싶은 숫자를 지정하셔도 됩니다.

 

그리고 plt.bar()에 age_x대신에 x_indexes와 x_indexes - width를 각각 넣어줍니다. 그렇게 하면 아래에 dev_y 

 

x_indexes와 대응하여 bar를 만들고 py_y는 x_indexes - width에 대응하여 그래프를 만들기때문에 겹치지 않습니다.

 

아래에 x_indexes리스트와 x_indexes - width리스트의 차이를 출력해보았습니다. 

 

x_indexes - width는 x_indexes에서 0.25씩 뺀 값들의 리스트입니다.

그렇게 하면 x축에 값이 0,1,2,3... 됩니다. 다시 x축의 값을 ages_x로 만들어 주기 위해서는 20열에 plt.xticks()를 사용해줍

 

니다. 그리고 ticks = x_indexes에 ages_x를 라벨로 붙여줍니다. 그러면 아래와 같이 두개의 바그래프가 겹치지 않고 출력

 

되는것을 확인할 수 있습니다.

 

 

728x90