일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 |
29 | 30 |
- 포스코인턴
- 군집화
- 기계공학
- 파워포인트
- 모깎이
- Fusion 360
- Python
- 비지도학습
- 매트랩
- matlab
- 열역학
- ppt
- 연료전지
- simulink
- 스틸브릿지
- matplotlib
- CAD
- 윈도우
- 머신러닝
- reference manager
- 클러스터링
- Desktop
- 파이썬
- git
- 포스코
- 멘델레이
- 시뮬링크
- mendeley
- PEMFC
- github
- Today
- Total
신군의 역학사전
[Matplotlib] Matplotlib 설치하기 & plot함수 활용법 본문
Matplotlib는 파이썬에서 가장 많이 활용되는 그래프 라이브러리로, 데이터 시각화에 유용합니다. 특히 Numpy, Pandas 등과 함께 사용하여 좋은 시너지를 낼 수 있으며, 저 역시 가장 많이 활용하는 모듈 중 하나입니다. 같은 데이터라도 어떻게 시각화하느냐에 따라 보는 사람의 이해를 높일 수 있기 때문에, 다양한 그래프 시각화 방법에 대해 차차 정리해볼 예정입니다.
1. matplotlib 설치 & import하기
pip install matplotlib
conda install matplotlib
다른 모듈들과 마찬가지로 pip install 명령을 통해 설치해줄 수 있습니다. 아나콘다 환경을 활용한다면 conda 명령어를 활용해줍니다.
import matplotlib.pyplot as plt
마찬가지로 import 명령어를 통해 모듈을 불러올 수 있으며, 관용적으로 plt 라는 단축어를 활용합니다. matplotlib 라이브러리를 주로 데이터 시각화에 활용하기 때문에, 그래프 그리는데 필요한 핵심함수들만 불러오기 위해 matplotlib의 pyplot만을 주로 불러옵니다. 물론 이외의 기능을 활용하기 위해서는 별도의 import가 필요합니다.
2. 폰트 지정
plt.rcParams['font.family'] = '폰트명'
그래프의 제목, 레이블, 범례 등에 활용되는 텍스트의 폰트를 지정해줄 수 있습니다. rcParams를 통해 지정할 수 있으며, 저는 보통 모듈 import 해오는 셀에 함께 초기설정으로 넣어주는 편입니다.
plt.rcParams['font.family'] = 'Times New Roman'
폰트야 여러가지가 있겠지만, 저는 Times New Roman체를 주로 활용합니다. 폰트는 개인의 취향에 따라 잘 선택하시면 될 듯 합니다.
3. Plot함수 활용법
3-1. Plot함수를 활용한 그래프 그리기
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
우선 시각화를 위해 데이터를 임의로 만들어주었습니다. 0~10의 x값에 대응하여 sin,cos함수 데이터를 생성해줍니다.
plt.plot(x, y1)
plt.show()
plt.plot함수는 선 그래프를 그려주는 함수로, plt.plot(x,y)형식으로 사용됩니다. 이를 활용하여 x,y축의 데이터의 관계를 선으로 시각화할 수 있습니다. 시각화한 결과물을 출력하기 위해서 plot함수는 show()와 항상 함께 사용되어야 하는데, Jupyter Notebook 환경에서는 plt.show()를 생략해도 결과물을 출력해줍니다.
여하튼 위와 같은 Sin함수가 정상적으로 그려지는 것을 확인할 수 있습니다.
plt.show()는 plot의 결과물을 출력해주는 기능을 담당하는데, show함수의 사용법에 따라 그래프의 출력형태가 달라질 수 있습니다.
가령 아래와 같이 2개의 그래프를 플롯해준 후 show함수를 사용하게 될 경우
plt.plot(x, y1)
plt.plot(x, y2)
plt.show()
아래와 같이 하나의 그래프만이 출력되고(하나의 그래프에 중첩되어 가시화되고)
각각의 plot에 대해 show함수를 호출해줄 경우
plt.plot(x, y1)
plt.show()
plt.plot(x, y2)
plt.show()
아래와 같이 2개의 그래프가 각각 출력됩니다.
따라서 용도에 맞게끔 show함수를 적절히 사용하면 됩니다.
3-2. 제목 및 레이블 기능
plt.plot(x, y1, label='레이블1')
plt.plot(x, y2, label='레이블2')
plt.show()
또한 그래프마다 레이블을 달아줄 수 있는데, 이는 위와 같이 plot함수내의 인자로 전달해줄 수 있습니다. 다만 레이블만 인자로 전달하면 그래프에 찍히지 않고
plt.plot(x, y1, label="sine wave")
plt.plot(x, y2, label="cosine wave")
plt.legend()
plt.show()
다음과 같이 legend()를 함께 실행시켜주어야 아래처럼 레이블이 정상적으로 출력됩니다.
plt.plot(x, y1, label="sine wave")
plt.plot(x, y2, label="cosine wave")
plt.title('Visualization', fontsize=18)
plt.xlabel('input')
plt.ylabel('output')
plt.legend()
plt.show()
또한 plt.title, plt.xlabel, plt.ylabel을 활용해 각각 제목, x축, y축 이름을 설정해줄 수 있습니다. 또한 각각 폰트 사이즈를 인자로 전달하여, 크기를 조절할 수 있습니다. 제목과 축제목은 legend와는 무관하게 잘 출력되는 듯 하며, 출력 결과는 아래와 같습니다.
3-3. 축 범위 및 눈금 조정
데이터의 특정 구간에 대해서만 보고자 한다면, x축, y축 각각에 범위를 지정해줄 수 있습니다. 이는 각각 xlim, ylim을 통해 지정할 수 있습니다. 예시 코드는 아래와 같습니다.
plt.plot(x, y1, label="sine wave")
plt.plot(x, y2, label="cosine wave")
plt.title('Visualization', fontsize=18)
plt.xlabel('input')
plt.ylabel('output')
plt.xlim(0,5.0)
plt.ylim(0,1.0)
plt.legend()
plt.show()
이에 따른 출력결과는 아래와 같습니다. 0~5의 인풋값에 대한 0~1사이의 값만 정상적으로 출력됩니다.
3-4. 스타일 지정
3-4-1. 색상
plt.plot(x, y1, color='blue')
plt.plot(x, y2, color='green')
plt.plot(x, y2, color=(1.0, 0.2, 0.3)) #RGB값으로 지정가능
color인자는 그래프의 선 색상을 지정하며, red, green, blue, black, yellow 등의 색상을 지정할 수 있습니다. 또한 RGB 값으로 지정 역시 가능합니다. 이를 반영한 그래프는 아래와 같이 출력됩니다.
3-4-2. 선 스타일
plt.plot(x, y, color='red', linestyle='--', linewidth=2)
linestyle 인자는 선의 모양(스타일)을, linewidth 인자는 선의 두께를 지정합니다. linestyle로는 실선(-), 점선(--) 등을 저는 주로 활용합니다. 선의 굵기는 디폴트값이 1.0으로, 이외의 값을 지정하기 위해서는 인자로 전달해주어야 합니다.
plt.plot(x, y1, label="sine wave", color="blue", linestyle='-', linewidth=2)
plt.plot(x, y2, label="cosine wave", color="green", linestyle='--')
plt.title("Visualization", fontsize=18)
plt.xlabel("input")
plt.ylabel("output")
plt.legend()
plt.show()
이를 반영하여 위와 같이 실행해보면, 아래와 같이 출력됩니다. 선의 굵기에 대한 차이도 한눈에 확인할 수 있습니다.
3-4-3. 마커 스타일
마커는 그래프 상의 데이터 포인트를 시각적으로 표시하는 작은 기호로, 마커 스타일의 지정을 통해 그래프에서 데이터 포인트를 강조할 수 있습니다.
plt.plot(x, y, marker='o', markersize=6, markerfacecolor='blue', markeredgecolor='red')
marker인자를 통해 마커의 종류를 지정할 수 있으며, markersize, markerfacecolor, markeredgecolor 인자의 활용을 통해 각각 마커의 크기, 마커 색상, 마커 테두리 색상을 지정할 수 있습니다. 마커 종류로는 원(o), 사각형(s), 별(*), X표시(x) 등이 있는데, 저는 주로 원을 많이 활용하는 편입니다.
plt.plot(
x,
y1,
label="sine wave",
color="blue",
linestyle="-",
linewidth=2,
marker="o",
markersize=6,
markerfacecolor="blue",
markeredgecolor="red",
)
plt.plot(
x,
y2,
label="cosine wave",
color="green",
linestyle="--",
marker="o",
markersize=8,
markerfacecolor="none",
markeredgecolor="red",
)
plt.title("Visualization", fontsize=18)
plt.xlabel("input")
plt.ylabel("output")
plt.legend()
plt.show()
이를 반영하여 위와 같이 실행해보면, 아래와 같이 출력됩니다. markersize의 차이도 한눈에 느낄 수 있으며, markerfacecolor를 none값을 전달할 경우, 속이 빈 형태의 마커가 출력됨을 확인할 수 있습니다.
3-5. 격자(Grid) 설정
격자(grid)는 그래프에서 데이터 포인트를 시각적으로 쉽게 비교할 수 있도록 돕는 수직선과 수평선의 배열로, matplotlib에서는 격자를 쉽게 추가할 수 있는 기능을 제공합니다.
plt.grid()
plt.grid(True)
단순히 plt.grid()를 통해 격자를 표시할 수 있습니다. 함수 내 인자로 True를 전달해도 좋습니다.
plt.plot(
x,
y1,
label="sine wave",
color="blue",
linestyle="-",
linewidth=2,
marker="o",
markersize=6,
markerfacecolor="blue",
markeredgecolor="red",
)
plt.plot(
x,
y2,
label="cosine wave",
color="green",
linestyle="--",
marker="o",
markersize=8,
markerfacecolor="none",
markeredgecolor="red",
)
plt.title("Visualization", fontsize=18)
plt.xlabel("input")
plt.ylabel("output")
plt.legend()
plt.grid()
plt.show()
이를 반영하여 위와 같이 실행해보면, 아래와 같이 격자가 함께 가시화됩니다.
3-6. 이미지파일 저장
plt.savefig함수를 통해 출력한 이미지 파일을 저장할 수 있습니다.
path = os.path.join('..', 'image') # 상대 경로로 이미지 디렉토리 설정
filename = 'sinewave.png' # 파일 이름 설정
plt.savefig(os.path.join(path, filename)) # 전체 경로를 결합하여 저장
가장 중요한 인자로는 저장할 파일명과 경로인데, 저는 위와 같이 os.path.join을 주로 활용합니다. 아무래도 오류가 적게나고 코드가 비교적 깔끔하다는 느낌이 들기 때문입니다.
plt.plot(
x,
y1,
label="sine wave",
color="blue",
linestyle="-",
linewidth=2,
marker="o",
markersize=6,
markerfacecolor="blue",
markeredgecolor="red",
)
plt.plot(
x,
y2,
label="cosine wave",
color="green",
linestyle="--",
marker="o",
markersize=8,
markerfacecolor="none",
markeredgecolor="red",
)
plt.title("Visualization", fontsize=18)
plt.xlabel("input")
plt.ylabel("output")
plt.legend()
plt.grid()
path = os.path.join('..', 'image')
filename = 'sinewave.png'
plt.savefig(os.path.join(path, filename))
plt.show()
이를 반영하여 위와 같이 실행하면, 아래와 같이 지정한 폴더 경로에 'sinewave.png'라는 이미지 파일이 저장됩니다.
조회해보면 원하는 이미지가 잘 저장되었음을 확인할 수 있습니다. 다만 여기서 조심해야할 점은 savefig는 show 호출전에 호출이 되어야한다는 점. show를 통해 이미 화면에 표시한 후 이미지 파일을 저장하게 될 경우, 빈 이미지 파일만 저장이 되는 듯 합니다.
path = os.path.join('..', 'image')
for i in range(3):
filename = f'sinewave{i}.png'
plt.savefig(os.path.join(path, filename))
plt.show()
또한, f-string 포맷팅을 활용하면, 여러 이미지 파일을 파일명이 겹치지 않도록 쉽고 빠르게 저장할 수 있습니다. 아래와 같이 3개의 이미지파일이 다른 파일명으로 저장된 것을 확인할 수 있습니다.
우선은 이정도로 plot함수 활용법에 대해 정리를 해봤습니다. 자주 쓰는 함수다보니 인자 하나하나 자세히 정리해보려 했지만, 그럼에도 못담은 내용들이 조금 있습니다. 이는 차차 업데이트하거나 새로운 게시글에 정리하는 방향으로 내용을 추가하도록 해보겠습니다.
'Python > Matplotlib' 카테고리의 다른 글
[Matplotlib] Subplots 활용법 (0) | 2024.11.25 |
---|---|
[Matplotlib] Scatter함수 활용법 (0) | 2024.11.22 |