본문 바로가기
공부 목록/IT & 프로그래밍

파이썬 Matplotlib의 이미지 저장 메서드 savefig() 사용하기

by 독학박사 2023. 4. 30.

목차


    Matplotlib는 파이썬에서 데이터 시각화를 위한 강력한 라이브러리 중 하나입니다. 이 라이브러리에는 그래프를 이미지 파일로 저장하는 savefig() 메서드가 있습니다. 이 메서드는 다양한 파일 형식을 지원하며 그림 크기, 해상도, 배경색, 압축 등의 다양한 옵션을 설정할 수 있습니다. 오늘은 해당 메서드에 대해서 알아보려고 합니다.

     

     

    파이썬 matplotlib의 savefig()로 이미지 저장하기
    파이썬 matplotlib의 savefig()로 이미지 저장하기

     

     1. savefig() 메서는 기본 사용법

    savefig() 메서드에 대한 설명은 다음과 같습니다.

     

    matplotlib.pyplot.savefig(
    	fname, dpi=None, facecolor='w', edgecolor='w',
    	orientation='portrait', papertype=None, format=None,
    	transparent=False, bbox_inches=None, pad_inches=0.1,
    	frameon=None, metadata=None)

     

    fname: 저장할 파일 이름을 지정합니다. 파일 경로를 포함한 전체 경로를 입력하거나, 현재 디렉터리에 파일 이름만 입력할 수 있습니다. 파일 이름의 확장자에 따라 이미지 형식이 결정됩니다. 뒤에 있는 format은 별도로 지정해 주지 않고 여기서 확장자를 선정할 수 있습니다. fname은 문자열로 넣어주어야 합니다. 예로 'test.png'와 같은 형태로 입력합니다.

     

    dpi: 저장할 이미지의 해상도를 지정합니다. 기본값은 None이며, 이 경우에는 그래프 크기에 따라 자동으로 결정됩니다. dpi는 dots per inch의 약어로, 인치당 점의 개수를 나타내는 해상도 값입니다. 이 값은 정수나 부동소수점 숫자로 입력할 수 있으며, 숫자가 클수록 더 세밀한 해상도의 이미지가 생성됩니다. 주로 72, 150, 300 등의 값이 사용됩니다. 예를 들어, dpi를 300으로 설정하면 인치당 300개의 점이 생성되는 고해상도 이미지가 생성됩니다.

     

    facecolor & edgecolor : 그래프의 배경과 테두리 색을 지정합니다. 기본값은 'w'로 흰색입니다. 해당 값으로 사용할 수 있는 예는 다음과 같습니다.

     

    미리 정의된 색상 이름: 'blue', 'red', 'green', 'yellow', 'black' 등
    16진수 색상 코드: '#FF0000', '#00FF00', '#0000FF' 등
    RGB 튜플: (1, 0, 0), (0, 1, 0), (0, 0, 1) 등
    RGBA 튜플: (1, 0, 0, 0.5), (0, 1, 0, 0.5), (0, 0, 1, 0.5) 등

     

    orientation: 그림의 방향을 지정합니다. 'portrait' 또는 'landscape'로 설정할 수 있습니다.

     

    papertype: 출력할 용지 종류를 지정합니다. A4나 letter 등의 값을 입력할 수 있습니다.

     

    format: 저장할 이미지 형식을 지정합니다. 'png', 'pdf', 'svg', 'jpg', 'jpeg', 'tif', 'tiff' 등의 값을 입력할 수 있습니다. 기본값은 None입니다. fname에서 확장자를 지정하기 때문에 별도로 설정할 필요는 없습니다.

     

    transparent: 그래프 배경을 투명하게 지정합니다. 기본값은 False(투명하지 않음)입니다.

     

    bbox_inches: 그래프 범위를 지정합니다. 'tight'로 설정하면 그래프 외곽에 공백이 없도록 자동으로 범위를 조정합니다.

     

    pad_inches: 그래프와 경계 사이의 여백을 지정합니다. 기본값은 0.1입니다.

     

    frameon: 그림 테두리의 유무를 지정합니다. 기본값은 None입니다. True로 설정하면 테두리가 그려지며, False로 설정하면 테두리가 그려지지 않습니다.

     

    metadata: 저장할 이미지 파일의 메타데이터를 지정합니다.

     

     

     2.  파라메터별 예제 코드

     

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 예제 데이터 생성
    x = np.linspace(0, 10, 100)
    y = np.sin(x)
    
    #그래프 생성
    plt.plot(x, y)
    
    #그래프를 이미지 파일로 저장
    plt.savefig(
    	'sin_wave.png', dpi=300, facecolor='white', edgecolor='black',
        orientation='portrait', format='png', transparent=False,
        bbox_inches='tight', pad_inches=0.1)

     

    위의 코드에서는 sin 함수를 이용하여 그래프를 생성하고, savefig() 메서드를 사용하여 그래프를 이미지 파일로 저장하고 있습니다. 이때 사용된 파라미터들은 다음과 같습니다

     - dpi: 저장할 이미지의 해상도를 300으로 설정

     - facecolor: 그래프 배경색을 흰색으로 지정(검은색으로 할 경우 x축과 y축의 글자가 보이지 않을 수 있습니다.)

     - edgecolor: 그래프 테두리 색상을 검은색으로 지정(잘 확인이 되지 않습니다.)

     - orientation: 그림 방향을 portrait로 지정

     - format: 저장할 이미지 형식을 png로 지정

     - transparent: 그래프 배경을 투명하지 않게 설정

     - bbox_inches: 그래프 범위를 자동으로 조정하여 범위 밖의 부분이 잘리지 않도록 설정

     - pad_inches: 그래프와 경계 사이의 여백을 0.1로 지정하였습니다.

     - frameon: 오류가 잘 나타나기 때문에 가능하면 사용하지 않는 것을 권장합니다.

     

     이렇게 설정된 파라미터를 이용하여 생성된 이미지 파일은 현재 디렉터리에 sin_wave.png라는 이름으로 저장됩니다.

     

    png로 저장된 이미지
    png로 저장된 이미지

     

    3. 이미지 파일의 경로 저장

     필수적으로 사용하는 파라미터는 fname, 즉 파일명을 사용하는 것인데, 만일 현재 경로가 아닌 다른 경로에 이미지를 저장하고 싶다면 파일명 앞에 해당 경로를 넣으면 됩니다. 예로 'D://data//image//sin_wave.png'와 같은 형태로 하면 됩니다. 

     

     데이터 분석 시 분석 그래프를 이미지로 변환하는 경우는 많은 그래프를 빠르게 검토하고 싶을 때일 겁니다. 이럴 때는 for문을 사용하여 많은 그래프를 한꺼번에 저장할 수 있습니다. 파일명을 for에서의 요소로 대처해야 하는데, 이때는 경로를 특정 변수로 미리 지정하면 좋습니다.

     

    image_path = 'Data\\image\\'
    
    for i in range(len(data)):
    	plt.plot(data[i])
    	plt.savefig(image_path + title[i] + '.png'

     

     위의 코드는 설명을 돕기 위해 작성된 임의의 코드로 실행은 되지 않습니다. 이미지를 만들 데이터의 개수만큼 for을 수행하며 이미지의 타이틀명도 데이터 개수만큼 있다고 가정합니다. 미리 저장된 문자열의 데이터를 이미지 저장 시 '+'를 이용하여 조합할 수 있습니다.

     

     

    4. 마치며

     Matplotlib 라이브러리 중 plot에서 사용할 수 있는 savefig() 메서드에 대한 내용을 정리해 보았습니다. 기본적으로는 plt.plot()을 하고 바로 savefig() 메서드를 사용해야 합니다. 필수 파라미터로는 파일명(fname)이 사용됩니다. 이외의 파라미터는 잘 사용하지 않으나, dpi의 경우 그림의 크기 때문에 자주 사용하게 됩니다.

    댓글