[파이썬] matplotlib 설치방법 및 그래프 기초 사용법

[파이썬] matplotlib 설치방법 및 그래프 기초 사용법

데이터(자료)를 시각화 하기 위한 방법 중에 하나가 그래프를 그리는 것입니다.

데이터를 그래프화 하게됨으로써 데이터에 대한 분석이 가능해지고, 데이터의 패턴을 파악할 수 있습니다.

파이썬 언어는 matplotlib 라이브러러리를 사용하여 그래프를 그릴 수 있습니다.

matplotlib 설치방법

1. 명령프롬프트(cmd) 창을 실행

2. pip install matplotlib 명령어를 실행하여 설치

pip install matplotlib

matplotlib 기본 그래프 그리기

plot()함수가 그래프를 그려주는 함수입니다.

show()함수는 GUI기반의 프로그램을 실행시켜 그래프를 보여줍니다.

axis(x-min, x-max, y-min, y-max)함수는 x축과 y축의 범위를 지정할 수 있습니다.

하나의 리스트로 그래프를 그리면, x축은 자동으로 생성해줍니다.

y축의 범위가 7까지 보여지게 됩니다. x축은 자동으로 생성해주었음으로 7이 아닙니다.

import numpy as np
import matplotlib.pyplot as pyplot
a = [1, 2, 3, 4, 5, 6, 7]
#a = [x for x in range(0, 20)]
#b = [x*(-2) for x in range(0, 20)]
print(a)
pyplot.plot(a)
pyplot.show()

[실행결과]

다음 예제는 x축과 y축의 데이터를 모두 주고 그래프를 그립니다.

plot()함수에 값을 하나면 주면 y축 자료로 사용됩니다.

import numpy as np
import matplotlib.pyplot as pyplot
a = [1, 2, 3, 4, 5, 6, 7]
b = [2, 4, 6, 8, 10, 12, 14]

pyplot.plot(a, b)
pyplot.show()

참고로, x축과 y축의 데이터의 개수는 동일해야합니다.

그렇지 않으면 ValueError: x and y must have same first dimension, but have shapes (7,) and (5,) 오류가 발생합니다.

Traceback (most recent call last):
  File "C:\python\Workspace\main.py", line 8, in <module>
    pyplot.plot(a, b)
  File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 2840, in plot
    return gca().plot(
  File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axes\_axes.py", line 1743, in plot
    lines = [*self._get_lines(*args, data=data, **kwargs)]
  File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axes\_base.py", line 273, in __call__
    yield from self._plot_args(this, kwargs)
  File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axes\_base.py", line 399, in _plot_args
    raise ValueError(f"x and y must have same first dimension, but "
ValueError: x and y must have same first dimension, but have shapes (7,) and (5,)

matplotlib 그래프 범위 지정하는 방법

이번에는 axis()함수를 사용하여 x축과 y축의 범위를 지정해봅니다.

인자값으로 튜플자료형이나 리스트 자료형이 와야합니다.

x축은 0에서 10까지 , y축은 0에서 30까지 범위를 지정하였습니다.

xlim()함수와 ylim()함수를 사용하여 동일하여 axis()함수와 동일한 결과을 얻을 수 있습니다.

import numpy as np
import matplotlib.pyplot as pyplot
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 8, 10, 12, 14, 20, 22]

pyplot.plot(a, b)
pyplot.axis((0, 10, 0, 30)) #list or tuple

#pyplot.xlim(0, 10)
#pyplot.ylim(0, 30)

pyplot.show()

axis()함수의 인자값 타입을 잘 못 지정할 경우 TypeError: cannot unpack non-iterable int object The above exception was the direct cause of the following exception: 오류가 발생합니다.

C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/main.py
C:\python\Workspace\main.py:7: MatplotlibDeprecationWarning: Passing more than one positional argument to axis() is deprecated and will raise a TypeError two minor releases later.
  pyplot.axis(0, 10, 0, 30) #list or tuple
Traceback (most recent call last):
  File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axes\_base.py", line 1794, in axis
    xmin, xmax, ymin, ymax = limits
TypeError: cannot unpack non-iterable int object

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\python\Workspace\main.py", line 7, in <module>
    pyplot.axis(0, 10, 0, 30) #list or tuple
  File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 2461, in axis
    return gca().axis(*args, emit=emit, **kwargs)
  File "C:\Users\ilike\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axes\_base.py", line 1796, in axis
    raise TypeError('the first argument to axis() must be an '
TypeError: the first argument to axis() must be an interable of the form [xmin, xmax, ymin, ymax]

Process finished with exit code 1

matplotlib 그래프에 라벨(label) 붙이는 방법

title()함수를 사용하여 그래프의 상단에 제목을 붙일 수 있습니다.

xlabel()함수는 x축, ylabel()함수는 y축에 라벨을 붙일 수 있습니다. text()함수는 지정한 좌표 위치에 라벨을 표기합니다.

import matplotlib
import numpy as np
import matplotlib.pyplot as pyplot
import matplotlib.font_manager as fm
a = ["12.16", "212.17", "12.18", "12.19", "12.21", "12.22", "2020.12.23"]
b = [1, 8, 10, 12, 14, 20, 40]


font_prop = fm.FontProperties(fname="C:/Windows/Fonts/gulim.ttc").get_name()
matplotlib.rc('font', family=font_prop)

#pyplot.plot(a, b, 'r-.o')
pyplot.plot(a, b, 'r')
pyplot.axis((0, 10, 0, 70)) #list or tuple
pyplot.title("LG전자 주가 그래프")
pyplot.ylabel("주가(단위:만)")
pyplot.xlabel("날짜")
pyplot.text(2, 42, "상한가: LG전자, 세계적 자동차 부품업체와 합작사 설립")

pyplot.show()

matplotlib 그래프 스타일(style)을 변경하는 방법

그래프의 기본 색상은 파란색입니다. 이 그래프의 디폴트값, 즉 기본값은 “b-“입니다.

그래프의 선의 색상과 마크(mark)모양을 변경할 수 있습니다.

구분설명
colorb : blue
g : green
r : red
c : cyan
m : magenta
y : yellow
k : black
w : white
line style– (solid line style)
— (dashed line style)
-. (dash-dot line style)
: (dotted line style)
marker styleo (circles marker)
+ (plus symbols)
x (crosses)
d (diamond symbols)
s (square)
^ (triangle up)
p (pentagon marker)
h (hexagon1 marker)
| vline marker
_ hline marker
1 tri_down marker
import numpy as np
import matplotlib.pyplot as pyplot
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 8, 10, 12, 14, 20, 22]

pyplot.plot(a, b, 'r-o') #실선
pyplot.plot(a, b, 'r--o') # 끊어진 선 
pyplot.axis((0, 10, 0, 30)) #list or tuple


pyplot.show()
import numpy as np
import matplotlib.pyplot as pyplot
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 8, 10, 12, 14, 20, 22]

pyplot.plot(a, b, 'r-.o') #선점
pyplot.plot(a, b, 'r:o') #점선
pyplot.axis((0, 10, 0, 30)) #list or tuple


pyplot.show()

matplotlib 그리드 표기하는 방법

그래프에 그리드(Grid, 격자)를 표시하려면 grid()함수값을 True로 설정하면 가능합니다.

axis=’x’를 설정할 경우 x축( 세로 향)에만 그리드를 표시합니다.

axis=’y’를 설정하면 y축(가로방향)으로만 그리드를 표시합니다.

import numpy as np
import matplotlib.pyplot as pyplot
a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 8, 10, 12, 14, 20, 22]

pyplot.plot(a, b, 'r-o') #실선 
pyplot.axis((0, 10, 0, 30)) #list or tuple
pyplot.grid(True)

#pyplot.grid(True, axis='x')
#pyplot.grid(True, axis='y')


pyplot.show()

matplotlib 여러개의 그래프를 그리는 방법

plot()함수를 여러개 사용하거나 하나에 여러개의 그래프 데이터를 입력해주면 됩니다.

import numpy as np
import matplotlib.pyplot as pyplot
a = np.arange(1, 5)
b = np.arange(3, 7)

pyplot.plot(a, b, 'r')
pyplot.plot(a, b**2, 'b-s')
pyplot.plot(a, a**3, 'c:^')


pyplot.show()

그래프가 여러개일 때 그래프를 구분하기위해 label를 사용하여 legend()함수를 호출하면 구분정보를 추가할 수 있습니다.

import numpy as np
import matplotlib.pyplot as pyplot
a = np.arange(1, 5)
b = np.arange(3, 7)

pyplot.plot(a, b, 'r')
pyplot.plot(a, b**2, 'b-s', label="$b^2$")
pyplot.plot(a, a**3, 'c:^', label="let go")
pyplot.legend()


pyplot.show()

matplotlib 막대그래프 그리기

import numpy as np
import matplotlib.pyplot as pyplot
x = np.arange(1, 5)
y = x*3

pyplot.bar(x, y)
pyplot.show()

한글로 라벨을 표기할 경우 한글 깨짐 현상이 발생함으로 별도의 설정이 필요합니다.

한글 폰트를 지정하기 위해서는 matplotlib의 font_manager 모듈을 import 해야합니다.

그리고 fontProperties()함수를 사용하여 폰트 경로를 지정 후 matplotlib.rc()함수에 family폰트로 지정해줍니다.

font_prop = fm.FontProperties(fname="C:/Windows/Fonts/gulim.ttc").get_name()
matplotlib.rc('font', family=font_prop)

defalut font 와 폰트 사이즈(font size)를 확인하는 방법

import matplotlib.pyplot

print('# 폰트 사이즈')
print(matplotlib.pyplot.rcParams['font.size'])
print('# 폰트')
print(matplotlib.pyplot.rcParams['font.family'])

matplotlib 컴퓨터에 설치되어 있는 폰트 리스트 가져오는 방법

import matplotlib.pyplot as pyplot
import matplotlib.font_manager as fm
font_list = fm.findSystemFonts(fontpaths=None, fontext='ttf')
print(font_list)

[REFERENCE]

matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py

wikidocs.net/book/5011


카테고리의 다른 글
error: Content is protected !!