pie() 함수
pie() 함수는 전체 데이터 중 특정 데이터의 비율을 보기 쉽게 표현함
import matplotlib.pyplot as plt
plt.pie([10, 20])
plt.show()
axis() 함수: 파이 차트를 동그란 원으로 표현
- 레이블 추가하기
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
plt.pie([1000, 1300, 800, 1500], labels=['A형', 'B형', 'AB형', 'O형'])
plt.axis('equal')
plt.show()
- 비율 및 범례 표시하기
pie() 함수의 autopct 속성을 이용해 각 항목의 비율 표시
legend() 함수로 범례 추가
%.1f%% : 소수점 아래 첫 번째 소수점까지 표현하겠다는 의미
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
size = [2000, 2000, 1000, 1200]
label=['A형', 'B형', 'AB형', 'O형']
plt.pie(size, labels=label, autopct='%.1f%%')
plt.legend()
plt.show()
- 색 및 돌출 효과 정하기
colors 속성 : 색 설정
explode 속성 : 돌출 효과 설정 ( 0은 돌출되지 않음을 의미 / 숫자 크기와 돌출 효과 정도 비례)
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
size = [2000, 2000, 1000, 1200]
label=['A형', 'B형', 'AB형', 'O형']
color = ['darkmagenta', 'deeppink', 'hotpink', 'pink']
plt.pie(size, labels=label, autopct='%.1f%%', colors = color, explode=(0,0,0.1,0))
plt.legend()
plt.show()
제주도 성별 인구 비율 표현하기
import csv
import matplotlib.pyplot as plt
f=open('gender.csv')
data = csv.reader(f)
size=[]
name = input('찾고 싶은 지역의 이름: ')
for row in data:
if name in row[0]:
m=0
f=0
for i in range(101):
m+=int(row[i+3])
f+=int(row [i+106])
break
size.append(m)
size.append(f)
plt.rc("font", family = "Malgun Gothic")
color = ["cornflowerblue", "violet"]
plt.axis("equal")
plt.pie(size, labels = ["남", "여"], autopct = "%.1f%%", colors = color, startangle = 90)
plt.title(region + " 남녀 성별 비율")
plt.show()
산점도로 나타내기
scatter() 함수로 산점도 표현 가능
다음 코드에서 입력된 데이터를 순서쌍으로 표현하면 (1, 10), (2, 30), (3, 20), (4, 40) , 해당 좌표에 점이 찍힌 산점도가 그려짐
import matplotlib.pyplot as plt
plt.scatter([1,2,3,4], [10,30,20,40])
plt.show()
- 버블 차트로 표현하기
scatter() 함수는 버블 차트를 그릴 때도 사용 가능함
기존 코드에서 size를 의미하는 s 속성을 추가하고 원하는 크기를 입력
c 속성으로 각 점의 색상도 정할 수 있음
import matplotlib.pyplot as plt
plt.scatter([1,2,3,4], [10,30,20,40], s=[100,200,250,300], c=['red','blue','green','gold'])
plt.show()
colorbar() 함수: 그래프 옆에 컬러바를 추가
scatter() 함수에 c 속성을 추가하여 표현하고 싶은 색상의 개수를 설정하면 각 데이터에 해당하는 컬러바의 색으로 정해짐
여기서는 4개의 점을 각각 다른 색으로 표현하기 위해 c=range(4)를 추가
cmap이라는 컬러맵 속성을 사용해 컬러바에 사용될 색상의 종류도 정할 수 있음
import matplotlib.pyplot as plt
plt.scatter([1,2,3,4], [10,30,20,40], s=[30,60,90,120], c=range(4))
plt.colorbar()
plt.show()
- 임의의 데이터 100개 산점도로 나타내기
import matplotlib.pyplot as plt
import random
x=[]
y=[]
size=[]
for i in range(100):
x.append(random.randint(50, 100))
y.append(random.randint(50, 100))
size.append(random.randint(10, 100))
plt.scatter(x, y, s=size)
plt.show()
plt.scatter(x, y, s=size, c=size, cmap='jet') 수정 시 크기에 따라 다른 색 표현 가능
이렇게 표현하면 작은 점이 큰 점에 가려지는 문제 발생
→ alpha 속성으로 투명도 조절 (범위는 0~1, 0에 가까울수록 투명, 1에 가까울수록 불투명)
plt.scatter(x, y, s=size, c=size, cmap='jet', alpha=0.6) 수정 ↓
제주도의 연령대별 성별 비율 산점도로 표현하기
남성 인구수 중 가장 큰 값을 기준으로 y=x형태의 직선, 즉 추세선을 그려 한눈에 들어오도록 함
import matplotlib.pyplot as plt
plt.scatter(m, f, c= range(101), alpha=0.5, cmap='jet') # 컬러맵 적용
plt.colorbar()
plt.plot(range(max(m)),range(max(m)), 'g') # 추세선 추가
plt.show()
math 라이브러리에 있는 제곱근 함수인 sqrt()를 사용하여 점의 크기를 적절히 조절하고 x, y축의 이름을 xlabel(), ylabel() 함수로 정함
전체 코드
import csv
import math
f = open('gender.csv')
data = csv.reader(f)
m = []
f = []
size = []
name = input('궁금한 동네를 입력해주세요 : ')
for row in data :
if name in row[0] :
for i in range(3,104) :
m.append(int(row[i]))
f.append(int(row[i+103]))
size.append(math.sqrt(int(row[i])+int(row[i+103])))
break
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.rc('font',family='Malgun Gothic')
plt.figure(figsize=(10,5), dpi=300) # 그래프 크기 조절, dpi: 해상도
plt.title(name+' 지역의 성별 인구 그래프')
plt.scatter(m, f, s=size, c=range(101), alpha=0.5, cmap='jet')
plt.colorbar()
plt.plot(range(max(m)),range(max(m)), 'g')
plt.xlabel('남성 인구수')
plt.ylabel('여성 인구수')
plt.show()
참고서적
'데이터 분석' 카테고리의 다른 글
[데이터 분석] 영화 관객수 예측 (0) | 2024.03.07 |
---|---|
One-hot Encoding / get_dummies (0) | 2024.03.07 |
[데이터 분석] 다양한 형태로 시각화하기 (막대 그래프, 항아리 그래프) (0) | 2024.01.31 |
[데이터 분석] 우리 동네 인구 구조 시각화하기 (2) | 2024.01.29 |
[데이터 분석] A열의 한글이 깨져 보일 때 해결 방법 (1) | 2024.01.29 |