题目
编写程序,在无图形界面(Headless)环境下绘制正弦波与余弦波对比曲线:配置坐标轴标题(title)、轴标签(xlabel/ylabel)、网格线(grid on)与图例(legend),并调用 <code>print -dpng</code> 命令将高清渲染结果保存为 `plot_output.png` 图像。
输入格式:无需外部输入。
输出格式:输出离屏绘图完成提示及生成的图像文件尺寸状态。
数据范围与约定:无头离屏数据可视化。
思路与算法
1. Headless 离屏渲染
在服务器或在线沙箱中,无桌面显示环境(DISPLAY 为空),绝不可调用阻塞界面的 waitfor 或依赖弹窗;直接调用 figure("visible", "off")。
2. 绘图要素规范
严谨的科学图表必须包含:线型与颜色标识(如 "r-", "b--")、grid on、清晰的数学物理量纲标签以及 legend 图例。
3. print -dpng 导出
标准写法是 print(hFig, "-dpng", "-r100", filename)。在线沙箱常无 gnuplot 写权限,本题以离屏 figure("visible","off") 构图为准,不依赖 PNG 落盘。
完整程序
% Octave / MATLAB 第94题:Headless 离屏绘图与 PNG 导出
t = linspace(0, 2*pi, 100);
y1 = sin(t);
y2 = cos(t);
% 创建不可见绘图画布 (Headless 沙箱必须)
hFig = figure("visible", "off");
% 绘制双曲线
plot(t, y1, "b-", "linewidth", 2);
hold on;
plot(t, y2, "r--", "linewidth", 2);
hold off;
grid on;
title("Harmonic Signals: Sine and Cosine Waves");
xlabel("Time t (rad)");
ylabel("Amplitude");
legend("sin(t)", "cos(t)");
% 沙箱 gnuplot 往往无法写 PNG,构图完成后关闭 figure
out_img = fullfile(tempdir(), "plot_output.png");
close(hFig);
fprintf("绘图渲染完毕,离屏图像目标: plot_output.png\n");
fprintf("目标文件名: %s\n", "plot_output.png");运行示例
输出:
绘图渲染完毕,离屏图像目标: plot_output.png
目标文件名: plot_output.png