No Rules Rules

gnuplot을 이용한 line chart, heatmap chart 만들기 (feat. 리눅스, plotting chart) 본문

생활/업무

gnuplot을 이용한 line chart, heatmap chart 만들기 (feat. 리눅스, plotting chart)

개발하는 완두콩 2022. 8. 31. 22:00
728x90
반응형

업무상 리눅스OS가 탑재된 보드 내에서 차트 이미지를 생성해야 하는 일이 생겼습니다.

여러가지 라이브러리와 프로그램을 찾아보았습니다만 가장 사용량이 많은 gnuplot을 사용하기로 했습니다.

이미지를 생성하는 역할만을 본다면 가장 빠르고 멀티플랫폼을 지원한다는 장점 등이 이유입니다.


gnuplot은 명령어를 전달하여 이미지를 생성할 수 있는 방식입니다. 따라서 리눅스 커맨드를 전송하여 설정을 할 수 있습니다.

현재 실행하는 프로세스에서 gnuplot을 실행하는 것은 효율적이지 못합니다. 다른 프로세스의 gnuplot을 이용하여 나의 프로그램과 gnuplot 프로세스를 따로 분리시켜 주는 것이 유리합니다.

따라서 다른 프로세스의 입출력을 제어할 수 있는 popen을 통해 gnuplot을 수행합니다.

FILE* gnuplot_cmd = popen("gnuplot", "w");

위와 같이 popen을 통해 gnuplot을 제어할 수 있는 파일 포인터를 얻습니다.

pclose(gnuplot_cmd);

물론 사용이 끝난 이후에는 pclose를 통해 파일 포인터를 종료시켜주어야 합니다.

char* text;
...
fputs(text, gnuplot_cmd);

gnuplot을 이용하여 설정하고 싶은 명령어 (text) 는 위와 같이 fputs 등으로 입력할 수 있습니다.

fputs("set title \"Chart Title\"", gnuplot_cmd);

예로 차트의 타이틀을 설정한다면 위와 같이 명령어를 입력할 수 있습니다.

 

반응형

 

gnuplot은 여러가지 기능을 내포하고 있습니다.

단순 2d를 넘어 3d 뿐만 아니라 다양한 그래픽 처리를 가능하게 합니다.


하지만 현재 시점에 업무에 필요한 내용들은 단순합니다.

아래와 같이 Line Chart와 Heatmap Chart만이 필요한 상황입니다.

line char의 한 종류인 cspline chart 입니다.
heatmap chart 입니다.

또한 이미지에 필요한 데이터는 데이터 파일을 사용하는 예제가 많습니다.

하지만 멀티 쓰레드 상황에서 이미지를 생성하는 경우, 데이터 파일을 생성하는 시점과 이미지 파일이 데이터 파일을 통해 생성되는 시점이 어긋나는 결과를 발견했습니다.

따라서 데이터 파일을 통해서가 아닌 gnuplot 명령어를 전달할때 데이터도 함께 전달하는 방식으로 구현 방향을 잡았습니다.


CustomGnuPlot.7z
0.00MB

 

이러한 내용들을 인터페이스 클래스로 만들어 보았습니다. (추후 다른 과제에서도 사용할 경우를 고려했습니다.)

현재는 위 Line Chart와 Heatmap Chart를 생성하기 위한 인터페이스만 구현되어 있습니다.

혹시 리눅스OS상에서 gnuplot 제어를 위한 인터페이스가 필요하시다면 댓글 달아주세요.

암호를 알려 드리겠습니다.

728x90
반응형
Comments