gnuplot과 관련된 다른 것을 검색하면서이 문제가 발생했습니다. 비록 오래된 질문이지만, 나는 약간의 샘플 코드를 제공 할 것이라고 생각했다. 나는 이것을 내 프로그램에 사용하고, 나는 그것이 꽤 깔끔한 일을한다고 생각한다. AFAIK,이 PIPEing은 Unix 시스템에서만 작동합니다 (아래 Windows 사용자 편집 참조). 내 gnuplot 설치는 우분투 저장소의 기본 설치입니다. 내 응용 프로그램에서
#include <stdlib.h>
#include <stdio.h>
#define NUM_POINTS 5
#define NUM_COMMANDS 2
int main()
{
char * commandsForGnuplot[] = {"set title \"TITLEEEEE\"", "plot 'data.temp'"};
double xvals[NUM_POINTS] = {1.0, 2.0, 3.0, 4.0, 5.0};
double yvals[NUM_POINTS] = {5.0 ,3.0, 1.0, 3.0, 5.0};
FILE * temp = fopen("data.temp", "w");
/*Opens an interface that one can use to send commands as if they were typing into the
* gnuplot command line. "The -persistent" keeps the plot open even after your
* C program terminates.
*/
FILE * gnuplotPipe = popen ("gnuplot -persistent", "w");
int i;
for (i=0; i < NUM_POINTS; i++)
{
fprintf(temp, "%lf %lf \n", xvals[i], yvals[i]); //Write the data to a temporary file
}
for (i=0; i < NUM_COMMANDS; i++)
{
fprintf(gnuplotPipe, "%s \n", commandsForGnuplot[i]); //Send commands to gnuplot one by one.
}
return 0;
}
편집은 또한 호출 프로그램이 종료 될 때까지 플롯이 표시되지 않는 문제 다 퉜다. 이 문제를 해결하려면 fprintf
을 사용한 후 fflush(gnuplotPipe)
을 추가하여 최종 명령을 보내십시오.
나는 Windows 사용자가 popen
대신 _popen
을 사용할 수 있음을 알았지 만, Windows가 설치되어 있지 않기 때문에이를 확인할 수 없습니다.
편집 2
하나는 문자 "E"다음에 데이터 포인트 다음에 plot '-'
명령을의 gnuplot 전송하여 파일에 기록하는 것을 방지 할 수 있습니다.
내가이 일을하는 방법을 많이,이 일을 가장 간단한 방법은 (stdlib.h에서) 시스템을()를 사용하여 C에서 함수가 될 것이다 먼저의 gnuplot을 본 적이 있지만
fprintf(gnuplotPipe, "plot '-' \n");
int i;
for (int i = 0; i < NUM_POINTS; i++)
{
fprintf(gnuplotPipe, "%lf %lf\n", xvals[i], yvals[i]);
}
fprintf(gnuplotPipe, "e");
아마'system' 기능을 확인하십시오. – sje397