GNUplot在C++中使用时如何将x轴设置为自定义数组的取值范围
C++调用GNUplot自定义x轴范围解决方案
你当前只传入y数组绘图时,GNUplot默认使用数据的行索引(从0开始计数)作为x轴数值,所以x轴范围是0到N。要让x轴匹配你自己的x数组,可选择以下任意方案:
方案1:通用方案(支持任意非等间隔x值)
将x数组和y数组配对为二元序列后再传入,GNUplot会自动识别第一列为x值、第二列为y值,x轴范围会自动匹配x数组的最小到最大值。
示例代码(基于gnuplot-iostream库):
#include <vector> #include <tuple> #include <algorithm> // 自动计算最值时需要引入 // 拼接x、y为配对数据集 std::vector<std::tuple<double, double>> xy_data; for (int i = 0; i < N; ++i) { xy_data.emplace_back(x[i], y[i]); } // 绘图命令 gp << "plot " << gp.file1d(xy_data) << " with lines" << std::endl;
方案2:轻量方案(仅适用于等间隔采样的x值)
如果你的x数组是等间隔生成的,无需修改数据结构,直接在plot命令中指定x值的映射规则即可:
#include <algorithm> double x_min = *std::min_element(x.begin(), x.end()); double x_max = *std::max_element(x.begin(), x.end()); double x_step = (x_max - x_min) / (N - 1); // $0代指GNUplot读取数据时的行索引(从0开始),直接计算对应x值 gp << "plot " << gp.file1d(y) << " using (" << x_min << " + $0*" << x_step << "):1 with lines" << std::endl;
方案3:强制锁定x轴显示范围
如果你已经保证数据点的x坐标正确,仅需要手动固定x轴的显示范围,可以在绘图前设置xrange参数:
#include <algorithm> double x_min = *std::min_element(x.begin(), x.end()); double x_max = *std::max_element(x.begin(), x.end()); // 先设置x轴范围,再执行绘图命令 gp << "set xrange [" << x_min << ":" << x_max << "]" << std::endl; gp << "plot " << gp.file1d(y) << std::endl;
内容的提问来源于stack exchange,提问作者Casper
相关产品推荐
相关产品推荐

