그래프를 더 예쁘게! py-gnuplot 활용하기 (1) - 설치 및 기본 설정
코딩

그래프를 더 예쁘게! py-gnuplot 활용하기 (1) - 설치 및 기본 설정

728x90
반응형

 

 

 

파이썬엔 이미 matplotlib 이나 seaborn 같은 그래프 그리는 패키지가 있죠. 

이 둘을 사용하는 것도 이미 훌륭한 방법이겠습니다만, 다른 방법을 소개해볼까 합니다. 

 

바로 gnuplot 과 연계하여 그래프를 그리는 방법입니다.

 

1. Gnuplot ?

 

gnuplot 이란 1986년에 개발된 그래프를 그리는 커맨드 유저 인터페이스(TUI) 를 가진 프리웨어로 파이썬 패키지 못지않은 막강한 파워를 자랑합니다. 

다만 요즘 나오는 GUI 방식의 그래프 그리는 프로그램에 비해 커맨드를 입력하는게 단점으로 꼽힙니다. 그리고 외부 프로그램을 사용한 자동화가 어려웠다는 것도 한계점으로 꼽아볼 수 있겠습니다.

 

공식사이트에서 설치와 예제 참조하세요. 일부 데모 갤러리를 발췌하였습니다.

 

http://www.gnuplot.info/

 

gnuplot homepage

direct output to file: postscript (including eps), pdf, png, gif, jpeg, LaTeX, metafont, emf, svg, ...

www.gnuplot.info

 

 

 

2. 파이썬과 연계 방법

 

파이썬을 사용하면 좀 더 편리하게 사용할 수 있습니다. PYPI 에 나와있는 제일 최근의 패키지는 py-gnuplot 입니다. 

2022.01.23 기준으로 1.1.8 버전이며, 릴리즈 날짜는 2021.06.12 입니다.

 

파이썬과 gnuplot 이 이미 설치되었다는 가정하에 진행해보겠습니다. 

만약 파이썬이 설치되지 않았다? 하시는 분들이라면 아래의 링크 참조하여 설치해주세요.

** 환경 : 윈도우10, 파이썬 3.8.x 이상 이니 참조하세요.

 

2021.09.30 - [코딩] - 파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (1)

 

파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (1)

1. 파이썬의 설치는 간단합니다. https://www.python.org/ Welcome to Python.org The official home of the Python Programming Language www.python.org 에 들어가서 Downloads → 각자의 OS 에 맞는 파이썬을..

dragon1-honey1-wayfarer.tistory.com

 

2021.10.01 - [코딩] - 파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (2)

 

파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (2)

2. Visual Studio Code (VS Code) 설치 Visual Studio Code 는 마이크로소프트에서 개발한 소스코드 편집기 입니다. 유사한 프로그램으로 SublimeText, Notepad++ 등등이 있습니다. 다른 extension 앱들을 다운받..

dragon1-honey1-wayfarer.tistory.com

 

(1). 설치 및 첫번째 실행

 

다 설치하셨다면 아래의 커맨드를 입력하여 py-gnuplot 을 설치합시다.

 

pip install py-gnuplot

 

설치가 다 끝났으면 pypi 에 소개되어 있는 첫번째 demo 를 복사 붙여넣기 해봅시다. 편의를 위해 여기에도 가져왔으니 아래의 코드를 복사하셔도 됩니다.

 

#!/usr/bin/env python3
#coding=utf8
from pygnuplot import gnuplot

g = gnuplot.Gnuplot(terminal = 'pngcairo font "arial,10" fontscale 1.0 size 600, 400',
                    output = '"simple.1.png"')
g.plot('[-10:10] sin(x)',
       'atan(x)',
       'cos(atan(x))',
       key = 'fixed left top vertical Right noreverse enhanced autotitle box lt black linewidth 1.000 dashtype solid',
       style = 'increment default',
       samples = '50, 50',
       title = '"Simple Plots" font ",20" norotate')

 

이제 실행시키면...? 아마 실행이 안되실 겁니다..;

패키지의 코드를 일부 수정할 필요가 있습니다. 

 

(2). 수정 및 두번째 실행

 

VS Code 내에서 Gnuplot 부분을 더블클릭하고 F12를 누릅니다. 그러면 패키지의 gnuplot.py 로 이동합니다. VS Code 말고 다른걸 사용하신다면 경로를 직접 찾아갑니다. 여기서 UserName 은 각자 컴퓨터 사용자 이름, Python3X는 파이썬 설치 버전입니다.

 

C:\Users\UserName\AppData\Local\Programs\Python\Python3X\Lib\site-packages\pygnuplot

 

이제 아래의 부분을 수정해봅시다.

참고로 VS Code 에서 라인숫자 조회하는 방법은 ctrl + G 입니다. 

먼저 코드 맨 처음 부분 입니다.

 

#!/usr/bin/env python
#coding=utf8
"""
Gnuplot for python
"""

import sys, os, string, types, time
import collections
import subprocess
# try:
    # Python 2.
    # pass
    # from StringIO import StringIO
    # Python 3.
# except ImportError:
#     from io import StringIO
#import numpy as np  
import pandas as pd
from io import StringIO

 

원래는 파이썬 2 버전에 대한 try 가 있지만 사용할 버전은 파이썬 3 이므로, 굳이 try / except 구문이 필요 없습니다.

except 에 있는 from io import StringIO 를 밑에 써줍니다. 

 

그 다음, __init__ 부분 입니다. 172라인 ~ 입니다.

 

    def __init__(self, *args, log = False, **kwargs):
        '''
        *args: The flag parameter in gnuplot
        log: If show the gnuplot log
        **kwargs: the flag that need to be set. You can also set them in the set() function.
        '''

        self.isMultiplot = False
        # 원래 gnuplot 이라 되있는 부분을 절대경로로 gnuplot.exe 가 있는 위치로 바꿔줍니다.
        self.gnuplot = subprocess.Popen(['C:/Program Files/gnuplot/bin/gnuplot.exe','-p'], shell=True, stdin=subprocess.PIPE)
        # forward write and flush methods:
        self.write = self.gnuplot.stdin.write
        self.flush = self.gnuplot.stdin.flush
        self.log = log

        self.set(*args)
        self.set(**kwargs)

 

gnuplot 의 부분을 절대경로로 설치된 위치를 넣어줍니다. subprocess.Popen 은 프로그램안에 서브프로그램을 실행시킨다 의 의미정도로 보시면 됩니다.

 

그 다음, def load 입니다. 389라인 ~ . %(cmd) 를 %(filename) 으로 바꿔줍니다. 

 

    def load(self, filename):
        # self.cmd('load %s' %(cmd))
        self.cmd('load %s' %(filename))

 

이제 demo 의 코드도 일부 수정해봅시다.

 

from pygnuplot import gnuplot

g = gnuplot.Gnuplot()
g.plot('[-10:10] sin(x)',
       'atan(x)',
       'cos(atan(x))',
       key = 'fixed left top vertical Right noreverse enhanced autotitle box lt black linewidth 1.000 dashtype solid',
       style = 'increment default',
       samples = '50, 50',
       title = '"Simple Plots" font ",20" norotate')

 

처음 코드에 비해 terminal, output 의 세팅이 없어졌습니다. 있는채로 실행을 시키면 gnuplot 커맨드가 맞지 않아 실행이 안됩니다. 이들 설정은 다른 방법으로 해봐야 할 거 같네요.

 

실행을 시켜보면 아래와 같은 그래프가 출력됩니다. 

 

 

pypi 에 있는 그래프와 디테일은 조금 다르지만 그래프를 출력할 수 있음을 알았습니다. 

앞으로 더 공부해서 gnuplot 을 더 실용적으로 다루기위한 포스팅을 해보도록 하겠습니다. 

 

 

 

 

 

728x90
반응형