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

C++使用pbPlots生成SIR模拟可视化PNG文件损坏不可读问题求助

问题根因

  • 多系列配置时变量名写错:创建series2、series3对象后,所有属性赋值依然操作第一个series指针,导致后两个系列没有有效配置,绘图逻辑触发异常,生成空PNG文件。
  • 向量长度不匹配:S/I/R三个数据向量初始化长度为population,但X轴向量xPos长度为numDays,当numDays > population时会出现数组越界,进一步导致绘图失败。
  • 绘图参数矛盾:设置了实线类型,但linearInterpolation参数为false,该状态下仅绘制散点不会绘制连线。

修复步骤

1. 修正多系列赋值错误

将series2、series3的属性赋值操作对象替换为对应指针,示例如下:

// 第二个感染人数系列配置
ScatterPlotSeries* series2 = GetDefaultScatterPlotSeriesSettings();
series2->xs = &xPos;
series2->ys = &I;
series2->linearInterpolation = true;
series2->lineType = toVector(L"solid");
series2->color = CreateRGBColor(0, 1, 0);

// 第三个移除人数系列配置
ScatterPlotSeries* series3 = GetDefaultScatterPlotSeriesSettings();
series3->xs = &xPos;
series3->ys = &R;
series3->linearInterpolation = true;
series3->lineType = toVector(L"solid");
series3->color = CreateRGBColor(0, 0, 0);

最小复现代码中的series2配置也按照相同逻辑修改即可。

2. 修正向量长度初始化

S/I/R三个向量需要存储每天的统计数据,长度应该设置为numDays + 1(避免循环中访问i+1时下标越界):

vector<double> S(numDays + 1, 0.0);
vector<double> I(numDays + 1, 0.0);
vector<double> R(numDays + 1, 0.0);

3. 修正绘图参数

如果需要绘制连续趋势线,将所有系列的linearInterpolation属性设置为true即可,若仅需要散点可保留为false。

修改完成后重新编译运行,即可导出正常的PNG图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:30:02