코딩항해기

[Python] 데이터 시각화하기 (pyplot) 본문

Python

[Python] 데이터 시각화하기 (pyplot)

miniBcake 2024. 11. 26. 20:07

 

 

 

[Python] CSV 파일 데이터 불러오기

파이썬은 데이터 시각화에 유용한 언어이다. 데이터 시각화를 하기 위해서는 데이터가 있어야하는데, 이 글에서는 데이터를 불러오는 방식에 대해 정리할 예정이다. 먼저 CSV란, 표 형태의 데이

minibcake.tistory.com

 

 

matplolib 라이브러리에 있는 pyplot 모듈을 활용해 데이터 시각화 작업을 진행한다.

 

matplolib 라이브러리 다운로드

matplolib는 외부 라이브러리이므로 다운로드가 필요하다. cmd창에서 install 명령어를 통해 다운로드 할 수 있다.

pip install matplotlib

 

shell에서 import만 넣고 실행해봤을 때 오류가 나지 않는다면 이미 설치된 상태라는 것을 확인 할 수 있다.

확인이 완료됐다면 사용할 곳 상단에 import를 작성한다.

import matplotlib.pyplot as plt #별칭 plt로 지정

 

이제 pyplot(이하 plt)를 사용해 그래프를 그릴 준비가 완료됐다.

 

pyplot 기본 사용

plt를 통해 선(plot)이나 막대(bar) 그래프를 그리기 위해 넣는 데이터는 list타입이어야한다. 필요한 list(x,y)데이터 2개를 먼저 생성한다. 이후 plot나 bar에 리스트를 x,y순서대로 넣고 show로 실행하면 데이터가 시각화되어 뜬다.

import csv
import matplotlib.pyplot as plt #별칭

file_path = 'test.csv'

#표 생성 시 사용할 list
datas = [] 
temps = []

with open (file_path, mode='r') as file :
    reader = csv.reader(file)
    header = next(reader)
    for row in reader :
      #일부컬럼추출
      a = row[2]
      b = row[-2] 
      if a.startswith('Dec') : #12월만
        datas.append(a) #사용할 데이터 담기
        temps.append(float(b)) #사용할 데이터 담기

plt.bar(datas, temps) #막대 그래프
plt.title('Dec Temperature', fontsize='15') #표 제목설정
plt.xlabel('Date', fontsize='10') #X축 설명
plt.ylabel('Temp', fontsize='10') #Y축 설명
plt.show() #실행

 

(제목, x,y축 설명 생략가능하다.)

 

(-라서 막대 그래프가 아래를 향하고 있다. 뒤집는 설정도 존재한다.)

 

선 그래프로 바꾸면 아래와 같이 된다.

import csv
import matplotlib.pyplot as plt #별칭

file_path = 'test.csv'

#표 생성 시 사용할 list
datas = [] 
temps = []

with open (file_path, mode='r') as file :
    reader = csv.reader(file)
    header = next(reader)
    for row in reader :
      #일부컬럼추출
      a = row[2]
      b = row[-2] 
      if a.startswith('Dec') : #12월만
        datas.append(a) #사용할 데이터 담기
        temps.append(float(b)) #사용할 데이터 담기

plt.plot(datas, temps) #선 그래프
plt.title('Dec Temperature', fontsize='15') #표 제목설정
plt.xlabel('Date', fontsize='10') #X축 설명
plt.ylabel('Temp', fontsize='10') #Y축 설명
plt.show() #실행

 

 

pyplot 함수 및 속성 종합 정리

공식 사이트

 

matplotlib.pyplot — Matplotlib 3.5.3 documentation

Set the current rcParams. group is the grouping for the rc, e.g., for lines.linewidth the group is lines, for axes.facecolor, the group is axes, and so on. Group may also be a list or tuple of group names, e.g., (xtick, ytick). kwargs is a dictionary attri

matplotlib.org

 

그래프 생성 및 기본 설정 함수

plt.figure() 새로운 그래프 창 생성 plt.figure(figsize=(10,6))
plt.subplot() 여러 개의 서브플롯 생성 plt.subplot(2,2,1)
plt.title() 그래프 제목 설정 plt.title('제목')
plt.xlabel() x축 레이블 설정 plt.xlabel('X 축')
plt.ylabel() y축 레이블 설정 plt.ylabel('Y 축')
plt.grid() 그리드 표시 plt.grid(True)
plt.legend() 범례 표시 plt.legend(['데이터1'])

플롯 종류별 함수

plt.plot() 선 그래프 plt.plot(x, y)
plt.scatter() 산점도 plt.scatter(x, y)
plt.bar() 막대 그래프 plt.bar(x, height)
plt.hist() 히스토그램 plt.hist(data, bins=50)
plt.boxplot() 박스 플롯 plt.boxplot(data)
plt.pie() 파이 차트 plt.pie(sizes)
plt.imshow() 이미지/행렬 표시 plt.imshow(matrix)

축 관련 함수

plt.xlim() x축 범위 설정 plt.xlim(0, 10)
plt.ylim() y축 범위 설정 plt.ylim(-5, 5)
plt.xticks() x축 눈금 설정 plt.xticks([0,5,10])
plt.yticks() y축 눈금 설정 plt.yticks([0,2,4,6])
plt.axis() 축 범위 설정 plt.axis('equal')

스타일 및 색상 관련

plt.style.use() 스타일 설정 plt.style.use('seaborn')
plt.colormap() 컬러맵 설정 plt.colormap('viridis')
plt.color() 색상 설정 plt.plot(x, y, color='red')
plt.alpha 투명도 설정 plt.plot(x, y, alpha=0.5)

저장 및 표시

plt.savefig() 그래프 저장 plt.savefig('graph.png')
plt.show() 그래프 표시 plt.show()
plt.close() 그래프 창 닫기 plt.close()

텍스트 및 주석

plt.text() 텍스트 추가 plt.text(x, y, '텍스트')
plt.annotate() 주석 추가 plt.annotate('설명', xy=(x,y))
plt.figtext() 그림 전체에 텍스트 추가 plt.figtext(0.5, 0.5, '내용')

주요 속성 설정

linewidth 선 두께 plt.plot(x, y, linewidth=2)
linestyle 선 스타일 plt.plot(x, y, linestyle='--')
marker 마커 스타일 plt.plot(x, y, marker='o')
markersize 마커 크기 plt.plot(x, y, markersize=10)
fontsize 글자 크기 plt.title('제목', fontsize=14)
더보기

선 스타일 (Line Style) 속성


linestyle 또는 ls - 실선 plt.plot(x, y, linestyle='-')
  -- 파선 plt.plot(x, y, ls='--')
  -. 점선과 파선의 조합 plt.plot(x, y, ls='-.)`
  : 점선 plt.plot(x, y, ls=':')
linewidth 또는 lw 숫자 선의 두께 (포인트 단위) plt.plot(x, y, lw=2.5)

마커 (Marker) 속성

marker 'o' 원형 마커 plt.plot(x, y, marker='o')
  's' 사각형 마커 plt.plot(x, y, marker='s')
  '^' 삼각형 마커 plt.plot(x, y, marker='^')
  '+' 플러스 마커 plt.plot(x, y, marker='+')
markersize 또는 ms 숫자 마커의 크기 plt.plot(x, y, marker='o', ms=10)
markerfacecolor 또는 mfc 색상값 마커 내부 색상 plt.plot(x, y, marker='o', mfc='red')
markeredgecolor 또는 mec 색상값 마커 테두리 색상 plt.plot(x, y, marker='o', mec='black')
markeredgewidth 또는 mew 숫자 마커 테두리 두께 plt.plot(x, y, marker='o', mew=2)

폰트 및 텍스트 속성

fontsize 숫자 또는 문자열 글자 크기 plt.title('제목', fontsize=14)
      plt.title('제목', fontsize='large')
fontweight 문자열 또는 숫자 글자 굵기 plt.xlabel('X축', fontweight='bold')
      plt.xlabel('X축', fontweight=700)
fontfamily 문자열 폰트 종류 plt.title('제목', fontfamily='serif')
rotation 숫자 텍스트 회전 각도 plt.xticks(rotation=45)

색상 및 투명도 속성

color 또는 c 색상명 기본 색상명 plt.plot(x, y, color='red')
  RGB 튜플 RGB 값 (0~1) plt.plot(x, y, c=(0.2, 0.4, 0.6))
  16진수 코드 HEX 컬러 코드 plt.plot(x, y, c='#FF0000')
alpha 0~1 사이 실수 투명도 plt.plot(x, y, alpha=0.5)

그래프 영역 속성

figsize (가로, 세로) 그래프 크기 (인치) plt.figure(figsize=(10, 6))
dpi 숫자 해상도 plt.figure(dpi=300)
facecolor 색상값 배경 색상 plt.figure(facecolor='lightgray')

그리드 속성

grid True/False 그리드 표시 여부 plt.grid(True)
grid.axis 'both', 'x', 'y' 그리드 적용 축 plt.grid(True, axis='both')
grid.linestyle 선 스타일 그리드 선 스타일 plt.grid(True, linestyle='--')
grid.alpha 0~1 사이 실수 그리드 투명도 plt.grid(True, alpha=0.5)

축 속성 제어를 위한 복합 예제

plt.plot(x, y,
         color='blue',           # 선 색상
         linewidth=2,           # 선 두께
         linestyle='--',        # 선 스타일
         marker='o',           # 마커 종류
         markersize=8,         # 마커 크기
         markerfacecolor='red', # 마커 내부 색상
         markeredgecolor='black', # 마커 테두리 색상
         markeredgewidth=1.5,   # 마커 테두리 두께
         alpha=0.7)            # 전체 투명도

자주 사용되는 스타일 문자열

'b' 파란색
'g' 초록색
'r' 빨간색
'k' 검은색
'-' 실선
'--' 파선
':' 점선
'o' 원형 마커
's' 사각형 마커
'^' 삼각형 마커

 

 

 

참고 하기 좋은 블로그 글 : https://greeksharifa.github.io/references/2023/05/12/matplotlib-usage/#%EC%84%A0-%EA%B7%B8%EB%9E%98%ED%94%84plot

'Python' 카테고리의 다른 글

[Python] NumPy (np)  (1) 2024.11.27
[Python] CSV 파일 데이터 불러오기  (0) 2024.11.25
[Python] 파이썬 자료형  (0) 2024.11.20
[Python] 파이썬 Python 이해  (0) 2024.11.20