gpt4 book ai didi

c - 使C代码自动绘制图形

转载 作者:太空狗 更新时间:2023-10-29 16:31:30 26 4
gpt4 key购买 nike

我编写了一个程序,将数据列表写入“.dat”文件,目的是使用 gnuplot 单独绘制它。有没有办法让我的代码自动绘制它?我的输出是以下形式:

x-coord    analytic    approximation
x-coord analytic approximation
x-coord analytic approximation
x-coord analytic approximation
x-coord analytic approximation
....

理想情况下,当我运行代码时,图表也会打印出 x 标签、y 标签和标题(可以从我的 C 代码中更改)。非常感谢。

最佳答案

我在搜索有关 gnuplot 的其他内容时遇到了这个问题。尽管这是一个老问题,但我想我会提供一些示例代码。我将它用于我的程序,我认为它做得非常整洁。 AFAIK,此 PIPEing 仅适用于 Unix 系统(请参阅下面的 Windows 用户编辑)。我的 gnuplot 安装是来自 Ubuntu 存储库的默认安装。

#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

通过向 gnuplot 发送 plot '-' 命令后跟数据点和字母“e”,可以避免写入文件。

例如

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");

关于c - 使C代码自动绘制图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3521209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com