首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使C代码自动绘制图形

使C代码自动绘制图形
EN

Stack Overflow用户
提问于 2010-08-19 19:18:56
回答 5查看 94K关注 0票数 17

我已经写了一个程序,它将一个数据列表写入一个'.dat‘文件,然后使用gnuplot单独绘制它。有没有办法让我的代码自动打印出来呢?我的输出是这样的:

代码语言:javascript
复制
x-coord    analytic    approximation
x-coord    analytic    approximation
x-coord    analytic    approximation
x-coord    analytic    approximation
x-coord    analytic    approximation
 ....

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-04 07:05:29

我在搜索有关gnuplot的其他内容时遇到了这个问题。尽管这是一个老问题,我还是想贡献一些示例代码。我使用它作为我的一个程序,我认为它做了一个相当整洁的工作。此PIPEing仅适用于Unix系统(请参阅下面为Windows用户所做的编辑)。我的gnuplot安装是Ubuntu存储库的默认安装。

代码语言:javascript
复制
#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发送后跟数据点和字母"e“的plot '-'命令,可以避免向文件写入数据。

例如:

代码语言:javascript
复制
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");
票数 46
EN

Stack Overflow用户

发布于 2010-08-19 19:48:59

您可以创建一个gnuplot脚本并生成一个运行gnuplot的进程,以便从命令行绘制此脚本,也可以使用所提供的接口之一。对于C语言,有一个来自Nicolas Devillard的基于POSIX管道的接口,可以从这里获得:http://ndevilla.free.fr/gnuplot/ ...and一个基于iostream的C++版本可以通过git获得(参见:http://www.stahlke.org/dan/gnuplot-iostream/ )

不过,最可移植也可能是最简单的方法仍然是调用gnuplot来绘制脚本。正如sje397提到的,请查看stdlib.h中的system()调用的文档。

另外,还有GNU plotutils,它提供了libplot,一个用于绘制数据集的库,您可以在应用程序中使用它。请参阅:http://www.gnu.org/software/plotutils/

票数 6
EN

Stack Overflow用户

发布于 2015-09-03 22:59:38

尽管我见过很多这样做的方法,但最简单的方法是使用C语言中的system() (来自stdlib.h)函数。首先创建一个gnuplot脚本,并将其保存为"name.gp“(无论是名称还是扩展名)。

一个简单的脚本是,

代码语言:javascript
复制
plot 'Output.dat' with lines

保存此脚本文件后,只需添加

system("gnuplot -p name.gp");

在代码的末尾。

事情就是这么简单。

确保将gnuplot path添加到Windows系统路径变量中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3521209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档