You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过gnuplot-iostream控制XY轴绘制数据折线图?

使用gnuplot-iostream实现折线图并控制坐标轴

下面提供两种实现方案,同时包含坐标轴的自定义控制:

方案1:直接读取本地文件绘制

这种方式和你命令行里的逻辑一致,通过gnuplot-iostream直接加载test.txt文件,同时可以添加坐标轴相关设置:

#include <gnuplot-iostream.h>

int main() {
    Gnuplot gp;

    // 设置坐标轴标签
    gp << "set xlabel 'X 值'\n";
    gp << "set ylabel 'Y 值(平方)'\n";
    // 设置坐标轴范围(可选)
    gp << "set xrange [0:13]\n";
    gp << "set yrange [0:150]\n";
    // 绘制折线图,指定文件路径和绘图样式
    gp << "plot 'C:\\\\gnu\\\\test.txt' using 1:2 with lines title 'y = x²'\n";

    return 0;
}
  • 路径里的\\\\是C++字符串的转义写法,对应实际路径的\
  • using 1:2指定用文件的第1列作为X轴、第2列作为Y轴
  • title可以给折线添加图例,set xlabel/ylabel设置轴名称,set xrange/yrange限定轴范围

方案2:通过内存数据传递绘制

如果不想依赖本地文件,可以把数据加载到内存,再通过send1d传递给gnuplot:

#include <gnuplot-iostream.h>
#include <vector>
#include <utility>

int main() {
    Gnuplot gp;

    // 准备数据:用std::vector<std::pair<double, double>>存储X-Y对
    std::vector<std::pair<double, double>> data;
    for (int i = 1; i <= 12; ++i) {
        data.emplace_back(i, i*i);
    }

    // 设置坐标轴样式
    gp << "set xlabel 'X 值'\n";
    gp << "set ylabel 'Y 值(平方)'\n";
    gp << "set grid\n"; // 可选:添加网格线
    // 发送绘图命令,用'-'表示从标准输入读取数据
    gp << "plot '-' using 1:2 with lines title 'y = x²'\n";
    // 传递内存中的数据
    gp.send1d(data);

    return 0;
}
  • send1d支持多种数据结构,std::vector<std::pair<...>>是最常用的X-Y数据格式
  • 执行plot '-'后,gnuplot会等待数据输入,send1d就是把内存数据发送过去
  • 同样可以添加各种坐标轴控制命令,比如set grid开启网格

注意事项

  • 确保编译时链接gnuplot-iostream相关库,比如在GCC中需要加上-lboost_iostreams -lgnuplot_iostream(根据实际环境调整)
  • 运行前要保证系统中已安装gnuplot,且可执行文件在环境变量路径中

内容的提问来源于stack exchange,提问作者rob18767

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:58:25