[Python]맷플롯립

2023. 12. 22. 16:29· 공부/Python
목차
  1. 데이터 시각화**(data visualization)**
  2. 맷플롯립 활용 단계
  3. 선 그래프
  4. 막대 그래프
  5. 산포도(산점도) 그래프
  6. 파이 차트(pie chart)
  7. 파이 차트 : 부채꼴 분리
  8. 파이 차트 : 그림자. 색상 지정
  9. 히스토그램(histogram)
  10. 히스토그램 : 막대 모양
  11. 다중 히스토그램
  12. 정규분포 난수 히스토그램
  13. 균일분포, 정규분포, 표준정규분포
  14. 상자 차트(box plot)
반응형

데이터 시각화**(data visualization)**

  • 점이나 선, 막대 그래프 등의 시각적 이미지를 사용하여 데이터를 화면에 표시하는 기술
  • 효과적인 시각화는 사용자가 데이터를 분석하고 추론하는 데 도움
    • 데이터를 직관적으로 이해
    Untitled.png
    • matplotlib
      • 데이터 시각화 도구
      • 선 그래프, 산포도 등 다양한 그래프 그리는 용도

맷플롯립 활용 단계

  • pyplot 모듈 불러오기
    • import matplotlib.pyplot as plt
      • plt 별칭 사용
  • 수치 데이터 정의 → 리스트, 넘파이 배열
    • 2차원 데이터 → x축 데이터, y축 데이터
    • x축, y축 데이터 개수 동일
  • 그래프 종류 결정
    • 선 그래프 → plot() 함수
      • 그래프 세부 설정은 인자로 전달 → 선 색, 마크 종류, 선 두께 등
  • 제목, y축 레이블 설정
    • title() 함수, ylabel() 함수
  • 그래프 출력
    • show() 함수

선 그래프

  • plot() 함수
  • plt.plot(xarr, yarr, color, marker, linestyle)
    • color
      • r(red), g(green), b(blue), c(cyan), y(yellow), k(black), ...
    • maker
      • 원(o), 세모(^, v, <, >), 네모(s), 별(*), ...
    • linestyle
      • solid(-), dashed(--), dotted(:), dash-dot(-.)
  • plt.plot(xarr, yarr, format_string)
  • format_string : 색상 + 마커 모양 + 라인스타일
    • ex) ‘ro--’ = 빨간색, 원형 마커, 실선
    • ex) ‘b^--’= 파란색, 세모 마커, 실선

막대 그래프

  • bar() 함수
    • plt.bar(xarr, yarr) → 막대 그래프 생성
  • xticks() 함수
    • plt.xticts(xarr, ticks) → x축 값에 눈금 표시

산포도(산점도) 그래프

  • scatter() 함수
    • 개별 데이터 포인트를 그리는 차트
    • 산포도를 그릴 때는 각 데이터 포인트가 연결 안됨

파이 차트(pie chart)

  • 범주별 구성 비율을 원형으로 표현한 그래프
  • pie() 함수
    • plt.pie(data, labels = data_labels, autopct = ‘%.1f%%’)
      • data 배열과 data의 레이블 배열 전달
      • 백분율 표시 형식 전달

파이 차트 : 부채꼴 분리

  • plt.pie(radio, labels=labels, autopct='%.1f%%’, startangle=260, counterclock=False, explode=exp)
    • startangle = 첫번째 항목 시작 각도, counterclock = 반시계방향 여부
    • explode = 부채꼴이 파이 차트 중심에서 벗어난 정도 è 실수 배열

파이 차트: 부채꼴 분리 - page 20 (stratangle=?? 로 지정하였을때 어떠한 결과가 나오는지 시험에 나올수 있음

파이 차트 : 그림자. 색상 지정

  • plt.pie(radio, labels=labels, autopct='%.1f%%’, startangle=260, counterclock=False, explode=exp, shadow=True, colors=colors)
  • 파이 차트 그림자 표시, 항목별 색상 배열 전달

히스토그램(histogram)

  • 도수분포표를 막대 그래프로 나타낸 것
    • 가로축은 계급**(구간),** 세로축은 도수**(횟수나 개수 등)**
    • plt.hist(arr, bins=10) 함수 → bins = 구간 개수

정규분포를 보여줄때 자주 사용한다

bins 이해 해보자

히스토그램 : 막대 모양

  • plt.hist**(x, label,** histtype = 'stepfilled'****)
    • histtype : {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}

다중 히스토그램

  • plt.hist(x, bins, histtype, color= "blue", alpha=0.3);
    • color : 히스토그램 색상 지정, alpha : 투명도(0=투명 `~ 1=불투명)

정규분포 난수 히스토그램

  • 정규 분포 난수 배열 생성 함수
    • np.random.randn(10000) → 정규분포 난수 배열, 평균 0, 표준편차 1
    • == np.random.normal(0, 1, 10000)

균일분포, 정규분포, 표준정규분포

  • np.random.randn(10000) è 정규분포(평균 0, 표준편차 1) 난수배열 생성
  • np.random.standard_normal(10000) → 표준정규분포 난수배열 생성
  • np.random.rand(10000) → 균일분포 (0~1.0) 난수배열 생성

rand 함수와 randn 의 함수의 차이 : rand 함수는 균일분포 만들때, randn은 정규분포 만들 때 사용

상자 차트(box plot)

  • box-whisker plot이라고도 함
  • boxplot() 함수
    • plt.boxplot([배열 리스트]) è 각 배열에 대해 상자 차트 생성
  • 전체 데이터로부터 얻어진 요약 수치를 사용해 그림
    • 최소값
    • 제1사분위수(Q1)
      • 하위 25% 해당 값
    • 제2사분위수(Q2)
      • 중앙값
    • 제3사분위수(Q3)
      • 상위 25% 해당 값
    • 최대값
  •  

Untitled.png

실습
import matplotlib.pyplot as plt

years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [67.0, 80.0, 257.0, 1686.0, 6505, 11865.3, 22105.3]

# 선 그래프, x축 years 값, y축 gdp 값
plt.plot(years, gdp, color='green', marker='o', linestyle='solid')

# 제목 설정
plt.title("GDP per capita")

# y축에 레이블 설정
plt.ylabel("dollars")

# png 이미지 파일로 저장
plt.savefig("gdp_per_capita.png", dpi=600)
plt.show()

최솟값 , 최대값에 해당되는 값을 자동으로 양 끝쪽(x, y) 균일한 간격으로 만들어준다

Untitled.png

수학 함수 그래프

import matplotlib.pyplot as plt

x = [x for x in range(-10, 10)] # x값 설정, -10 ~ 10
y = [2*t for t in x]            # y(=2*x) 값 설정

plt.plot(x, y, marker='o')      # 선 그래프, 마커 = o(원)

plt.axis([-20, 20, -20, 20])    # x축, y축 범위 지정
# axis ([-20, 20, -20, 20])는 값의 최소값과 최대값으로 범위를 설정하지 않고
# x값 -20부터 20까지, y값 -20부터 20까지의 범위를 설정한다.

plt.show() # 그래프를 보여준다
Untitled.png

난수 그래프

import numpy as np

x = [x for x in range(1000)]     # x값 설정, 0~ 1000
y = np.random.rand(1000) * 6 - 3 # y 값 설정, [-3, 3 ] * 1000

plt.figure(figsize=(12, 4))    # 그래프 사이즈 설정 , 키워드 인
plt.title("Random Numbers")   # 제목 설정
plt.plot(x, y, 'bo-') # 포맷팅
plt.axis([0, 1000, -3.5, 3.5])   # x축, y축 범위 지정

plt.show()
Untitled.png
# plot은 가변인자 함수
# 포맷 스트링을 활용한 차트 장

# 1차 함수 1개 , 2차 함수 2개

import matplotlib.pyplot as plt

x = [x for x in range(-20, 20)]  # -20 ~ 20 정수
y1 = [2*t for t in x]            # y1 = 2 * x
y2 = [t**2 + 5 for t in x]       # y2 = x**2 + 5
y3 = [-t**2 - 5 for t in x]    # y3 = -x**2 - 5

# 빨강색 점선, 녹색 실선과 세모기호, 파랑색 별표와 점선
plt.plot(x, y1, 'r--', x, y2, 'g^-', x, y3, 'b*:')
plt.axis([-30, 30, -30, 30])    # x축, y축 범위 지정
plt.show()
Untitled.png

범례

  • 그래프에 범례 출력 è plt.legend() 함수 호출
  • 범례 항목(레이블) 지정 è plt.plot(x, y, label=‘값’)
# 범례
x = [x for x in range(20)]    # x = 0 ~ 20까지 정수 생성
y = [x**2 for x in range(20)] # y = x의 제곱값
z = [x**3 for x in range(20)] # z = x의 제곱값

plt.plot(x, x, label='linear')    # 각 선에 대한 레이블 지정
plt.plot(x, y, label='quadratic') # label를 지정하여야지만 범례 사용 가능
plt.plot(x, z, label='qubic')

plt.xlabel('x label')   # x축의 레이블
plt.ylabel('y label')   # y축의 레이블
plt.legend()            # 그래프의 레이블의 범례를 보여준다
plt.show()
Untitled.png

사인그래프

# 사인 그래프
# 0~ 360도 사이의 사인 함수 그래프 출력
# 리스트 함축 사용

import math

x = [angle for angle in range(360)]
y = [math.sin(math.radians(angle)) for angle in range(360)]

plt.plot(x, y, label="SINE")
plt.title("SINE WAVE")
plt.legend()
plt.show()
Untitled.png

코사인그래프

import math
import matplotlib.pyplot as plt

x = [angle for angle in range(360)]  # 리스트 함축 사용
z = [math.cos(math.radians(angle)) for angle in range(360)]
y = [math.sin(math.radians(angle)) for angle in range(360)]

plt.plot(x, y, label="SINE")        # label 지정
plt.plot(x, z, 'r-', label="COSINE")  # label 지정

plt.title("SINE & COSINE WAVE")
plt.legend()  # 범례 표시
plt.show()
Untitled.png

막대 그래프

# 막대 그래프

import matplotlib.pyplot as plt

years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [67.0, 80.0, 257.0, 1686.0, 6505, 11865.3, 22105.3]

plt.bar(range(len(years)), gdp, label="GDP")  # 막대 그래프 생성

plt.title("GDP per capita income")  # 제목 설정  
plt.ylabel("dollars")  # y축에 레이블을 붙인다.

plt.xticks(range(len(years)), years) # 눈금 레이블 표시
plt.legend()  # 범례 표시
plt.show()
Untitled.png
  • bar() 함수
  • plt.bar(xarr, yarr) è 막대 그래프 생성
  • xticks() 함수
  • plt.xticts(xarr, ticks) è x축 값에 눈금 표시
# 다중 막대 그래
import numpy as np

years = [1965, 1975, 1985, 1995, 2005, 2015]
ko = [130, 650, 2450, 11600, 17790, 27250]
jp = [890, 5120, 11500, 42130, 40560, 38780]
ch = [100, 200, 290, 540, 1760, 7940]

x = np.arange(len(years))    # x값 설정, 넘파이 배열
plt.bar(x + 0.0, ko, width=0.25, label="KO") # 막대 위치와 크기 변경
plt.bar(x + 0.3, jp, width=0.25, label="JP") # 막대 위치와 크기 변경
plt.bar(x + 0.6, ch, width=0.25, label="CH") # 막대 위치와 크기 변경
# (x + 0.?) 는 x축의 위치에서[0, 1, 2, 3, ....] 3개를 표시하기 위해 사용
# width는 막대의 너비를 조정한다 기본값은 1

plt.xticks(range(len(years)), years)  # 눈금 표시
plt.legend()  # 범례 표시
plt.show()
Untitled.png

산포도 그래프

  • scatter() 함수
  • 개별 데이터 포인트를 그리는 차트
  • 산포도를 그릴 때는 각 데이터 포인트가 연결 안됨
# 산포도(산점도) 그래프
# scatter() 함수
# 개별 데이터 포인트를 그리는 차트
# 산포도를 그릴 때는 각 데이터 포인터가 연결 안됨

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(20, 50)  # 크기 30인 넘파이 배열, 20 ~ 49
y = x + 2*np.random.randn(30)   # x값에 [0, 2) 정규분포 난수 더하기

plt.scatter(x, y)  # 산포도 생성
plt.title("Real Age vs Rhysical Age")  # 제목 설정
plt.xlabel("Real Age")  # x축 이름
plt.ylabel("Physical Age")  # y축 이름

plt.savefig("kkk.png", dpi=600)  # 그래프 지정
plt.show()
Untitled.png
  • plt.scatter(x, y, s=area, c=colors)
  • s = 각 점의 크기 값을 나타내는 배열 전달
  • c = 각 점의 색상 값을 나타내는 배열 전달
# 산포도(산점도) 색상, 크기 지정
# plt.scatter(x, y, s=area, c=color)

np.random.seed(0)
n = 50

x = np.random.rand(n)  # 0~1 사이의 실수
y = np.random.rand(n)
area = (30 * np.random.rand(n)) ** 2      # 각 점의 크기
colors = np.random.rand(n)   # 각 점의 색상

plt.scatter(x, y, s=area, c=colors)  # 산포도 생성
plt.show()
Untitled.png

파이차트

# 파이 차트

ratio = [34, 32, 16, 18]
labels = ['Apple', 'Banana', 'Melon', 'Grapes']

plt.pie(ratio, labels=labels, autopct='%.1f%%')
plt.show()
Untitled.png

파이차트 부채꼴 분리

# 파이 차트 : 부채꼴 분리
ratio = [34, 32, 16, 18]
lables = ['Apple', 'Banana', 'Melon', 'Grapes']
exlode = [0, 0.10, 0, 0.10]

plt.pie(ratio, labels=lables, autopct='%.1f%%', startangle=260, counterclock=False, explode=exlode)
plt.show()
Untitled.png

파이차트 그림자 색상 지정

ratio = [34, 32, 16, 18]
lables = ['Apple', 'Banana', 'Melon', 'Grapes']
exlode = [0.05, 0.05, 0.05, 0.05]
colors = ['silver', 'gold', 'whitesmoke', 'lightgray']

plt.pie(ratio, labels=lables, autopct='%.1f%%', startangle=260, counterclock=False, explode=exlode, shadow=True,
        colors=colors)
plt.show()
Untitled.png
import matplotlib.pyplot as plt

weight = [68, 81, 64, 56, 78, 74, 61, 77, 66, 68, 59, 71,
          80, 59, 67, 81, 69,73, 69, 74, 70, 65]

plt.hist(weight, bins= 25)
plt.show()
반응형
  1. 데이터 시각화**(data visualization)**
  2. 맷플롯립 활용 단계
  3. 선 그래프
  4. 막대 그래프
  5. 산포도(산점도) 그래프
  6. 파이 차트(pie chart)
  7. 파이 차트 : 부채꼴 분리
  8. 파이 차트 : 그림자. 색상 지정
  9. 히스토그램(histogram)
  10. 히스토그램 : 막대 모양
  11. 다중 히스토그램
  12. 정규분포 난수 히스토그램
  13. 균일분포, 정규분포, 표준정규분포
  14. 상자 차트(box plot)
'공부/Python' 카테고리의 다른 글
  • [Python]텍스트 처리
  • [Python]넘파이 배열
  • [Python]판다스
  • [Python]데이터 수집
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 디버깅키해시
  • webhacking
  • ViewModel
  • 상속
  • api 통신
  • Database
  • SpringBoot
  • jsp
  • 프로그래밍
  • 보안
  • docker
  • Computer science
  • 키 해시
  • 1.9.22
  • 코틀린기본문법
  • shared preference
  • 자바빈즈
  • Android Studio
  • Kotlin
  • 자료구조
  • Java
  • React
  • native app
  • cs
  • android studio 삭제
  • spring
  • dreamhack
  • 컴퓨터
  • Python
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[Python]맷플롯립
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.