파이썬엔 이미 matplotlib 이나 seaborn 같은 그래프 그리는 패키지가 있죠.
이 둘을 사용하는 것도 이미 훌륭한 방법이겠습니다만, 다른 방법을 소개해볼까 합니다.
바로 gnuplot 과 연계하여 그래프를 그리는 방법입니다.
1. Gnuplot ?
gnuplot 이란 1986년에 개발된 그래프를 그리는 커맨드 유저 인터페이스(TUI) 를 가진 프리웨어로 파이썬 패키지 못지않은 막강한 파워를 자랑합니다.
다만 요즘 나오는 GUI 방식의 그래프 그리는 프로그램에 비해 커맨드를 입력하는게 단점으로 꼽힙니다. 그리고 외부 프로그램을 사용한 자동화가 어려웠다는 것도 한계점으로 꼽아볼 수 있겠습니다.
공식사이트에서 설치와 예제 참조하세요. 일부 데모 갤러리를 발췌하였습니다.
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)
2021.10.01 - [코딩] - 파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (2)
(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 을 더 실용적으로 다루기위한 포스팅을 해보도록 하겠습니다.
'코딩' 카테고리의 다른 글
파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (3) (1) | 2021.10.09 |
---|---|
파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (2) (0) | 2021.10.01 |
파이썬 설치 - Visual Studio Code 와 함께 개발환경 구축하기 (1) (0) | 2021.09.30 |
[파이썬] 각종 주석을 달아봅시다 (한줄, 여러줄) (2) | 2021.09.26 |