[C/C++][gnuplot][수학][MFC] Windows 환경의 C++ 언어에서 gnuplot을 사용한 그래프 출력

 

공학도라면 논문을 쓰거나 보고서, 발표자료를 작성할 때 실험 데이터를 파일로 출력한 후 Microsoft Excel 차트 도구들이나 MATLAB plot 도구들을 사용하여 파일을 읽어 그래프로 그린 적이 있을 것입니다. 왜냐하면, C/C++언어에서는 그래프를 조작하기 위한 기본 라이브러리를 포함하고 있지 않기 때문에, 그래프를 그리려면 ChartFX와 같은 상용 라이브러리를 사용하거나 직접 코딩을 해야합니다.

 

Gnuplot은 리눅스 환경에서 그래프를 그려주는 도구로 개발되었다가 윈도우즈 환경으로도 포팅되었습니다. Gnuplot 자체도 C++ 프로그래머를 위해 그래프를 직접 제어가능한 API를 제공하지는 않지만, 약간 우회적인 방법(Gnuplot 윈도우에 명령어 캐릭터를 직접 전송하는 방법)으로 C++프로그램과 연동하는 방법이 있습니다. 이미 gnuplot++이 이러한 방법을 사용하여 API를 구현해 놓았습니다. 구글링 해보면 이것 외에도 여러 개가 검색이 됩니다. 그렇다면 왜 다시 gnuplot API를 만들게 되었는가? 검색되는 API들은 오래된 소스들이 많고 VC에서 컴파일이 잘 안되며 plot을 위해 새로운 API를 정의하여 API의 사용법을 익혀야만 했습니다. 원하는 것은 Gnuplot의 명령을 수정없이 그대로 사용하고 API를 구현한 소스코드도 짧고 이해가 쉬운것입니다. 그래서 다시 한 번 만들어 보기로 했습니다.

 

아래 두 개의 소스코드가 Gnuplot과 연동하는 API 역할을 합니다.  

 pGNUPlot.cpp

 pGNUPlot.h

 

Gnuplot을 설치하기 위해 공식 웹사이트 http://www.gnuplot.info/ 에서 최신 버전(현재 릴리즈 버전은 4.2.6임)의 파일을 받습니다. 설치 파일은 제공하지 않고 zip으로 압축되어 있습니다. 프로그램을 설치할 폴더에 압축을 풀어주는 것으로 설치과정이 끝납니다. 그리고 Gnuplot의 공식 웹사이트의 demo gallery에 방문하면  많은 분량의 예제와 실행화면을 볼 수 있습니다. 잘 설치되었는지 확인하기 위해 압축을 푼 폴더 아래 bin 폴더 안의 wgnuplot.exe를 실행해서 정상적으로 실행되는지 확인합니다.


마지막으로 우리가 작성중인 C++ 소스코드 내에 헤더파일 pgnuplot.h을 인클루드 하고 CpGnuplot 클래스를 사용하면 됩니다.

 

#include "pGNUPlot.h"
    ...

    // CpGnuplot의 생성자에서 인자로 wgnuplot.exe의 전체 경로를 넘겨준다.
    // Gnuplot을 설치한 경로에 따라 이 값을 바꿔야 한다.
    CpGnuplot plot ("C:\Program Files\gnuplot\bin\wgnuplot.exe");

    // Gnuplot의 splot 명령을 사용하여 그래프를 그린다.
    plot.cmd ("splot [x=-3:3] [y=-3:3] sin(x) * cos(y)");

 

 실행하면 아래와 같은 멋진 그래프가 출력됩니다.

 

  

만든 데이터를 파일로 저장하고 이 파일을 불러다가 그래프를 그릴 수도 있습니다.

 

#include <math.h>
#include "pGNUPlot.h"
    ...

    // CpGnuplot의 생성자에서 인자로 wgnuplot.exe의 전체 경로를 넘겨준다.
    // Gnuplot을 설치한 경로에 따라 이 값을 바꿔야 한다.
    CpGnuplot plot ("C:\Program Files\gnuplot\bin\wgnuplot.exe");

    FILE *fp = fopen ("C:\temp\1.dat", "wt");
    if (fp) {
        for (double i=0; i<20.; i+= 0.01) {
            fprintf (fp, "%f, %f\n", i, sin(i));
        }
        fclose (fp);
    }

    plot.cmd ("plot 'C:\temp\1.dat' with lines");

 

 실행하면 아래와 같은 sin 그래프가 출력됩니다.

 

 

 

Gnuplot의 공식 웹사이트의 demo gallery를 살펴보면 더 많은 종류의 그래프와 그리기 위한 스크립트가 있으니 참조하시면 됩니다.

 

2010.5.25 추가: 

Microsoft Visual Studio 에서 프로젝트를 만드신 경우, 좌측 Solution Explorer에서 프로젝트를 선택하시고 상단 메뉴의 View - Property Pages 메뉴를 선택하시면 다음과 같이 Property 설정 창이 뜹니다. 여기서 Character Set을 "Use Multi-Byte Character Set"으로 선택하여야 합니다.

 

 

그리고 pGNUPlot.cpp 파일 제일 처음에 "StdAfx.h" 파일도 인클루드 해야합니다.

 

2010.6.7 추가: 

예제 프로젝트를 추가 합니다. 

 

 TestGNUPlot.zip

 

아래는 실행 화면입니다.

 

 

 

2010.6.17 추가: 

유니코드를 사용하도록 예제 프로젝트를 수정하여 올립니다. 유니코드를 사용하는 프로젝트에서 사용하실 경우 아래 예제 프로젝트에서 pGNUPlotU.cpp 파일과 pGNUPlotU.h 파일을 가져다 쓰시면 됩니다.  

 TestGNUPlotU.zip

 

2010.9.29 추가: 

pGNUPlot.cpp 파일과 pGNUPlotU.cpp 파일의 소소한 버그를 수정하였습니다.

수정한 코드는 TestGNUPlot.zip 파일과과 TestGNUPlotU.zip 파일에 반영되어 있습니다.

 

[출처] https://blog.daum.net/pg365/28

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
226 [C/C++][tensorflow 1.x] windows C lib : [Tensorflow] How to Install Tensorflow for C API file 졸리운_곰 2021.11.19 0
225 [C/C++][tensorflow] tensorflovw 1.x version 텐서플로우 C 예제 file 졸리운_곰 2021.11.19 1
224 [Visual Studio][boost c++] [C++] boost 설치 및 visual studio 설정 file 졸리운_곰 2021.11.18 0
223 [리눅스 마스터][linux, UNIX] 전설의 라인 에디트 Man page — ED 사용법 졸리운_곰 2021.11.18 0
222 [리눅스 마스터][linux, UNIX] [편집][shell] ed (line editer) 사용예 졸리운_곰 2021.11.17 0
221 [C/C++][gnuplot][수학][MFC] Windows 환경의 C++ 언어에서 gnuplot을 사용한 그래프 출력 2 file 졸리운_곰 2021.11.12 0
» [C/C++][gnuplot][수학][MFC] Windows 환경의 C++ 언어에서 gnuplot을 사용한 그래프 출력 file 졸리운_곰 2021.11.12 2
219 [C/C++ 인공지능][linux][cuda] flashlight file 졸리운_곰 2021.11.09 2
218 [C/C++] C++ Basic Input/Output 졸리운_곰 2021.11.06 4
217 [C/C++] Console Input/Output Functions in C file 졸리운_곰 2021.11.05 0
216 [C/C++ 프로그래밍] CMake 예제 졸리운_곰 2021.11.04 5
215 C/C++의 만년, 패키지 매니저 file 졸리운_곰 2021.11.04 2
214 [docker][도커] 로컬 개발환경 Docker 사용하기 file 졸리운_곰 2021.10.16 2
213 [unix][linux][compiler] Yacc와 Lex 시작하기 file 졸리운_곰 2021.09.08 2
212 [Docker][도커] docker 이미지 및 컨테이너 관리 명령어 정리 file 졸리운_곰 2021.08.29 5
211 [docker][도커] 컨테이너 시작, 중지, 재시작 졸리운_곰 2021.08.29 1
210 [Visual Studio 2019] Visual Studio로 Linux 원격 개발하기(Ubuntu 설치부터 SSH 서버접속까지) file 졸리운_곰 2021.08.29 4
209 [unix][emacs] 이맥스와 함께하는 개발환경 . emacs 튜토리얼 file 졸리운_곰 2021.08.18 6
208 [DOCKER] 도커_컨테이너 생성, 시작, 정지 file 졸리운_곰 2021.08.15 2
207 [쿠버네티스][Kubernetes] Helm 사용법 file 졸리운_곰 2021.07.19 4
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED