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

Matlab实现带抖动的作业成绩散点+平均分折线绘图问题

Matlab作业成绩绘图问题修复方案

原代码核心错误点

  • 循环内x坐标输入不匹配:每次循环仅处理第i次作业的所有成绩,x坐标应全部为i,原代码误传入全量作业编号1~M,导致x、y向量长度不一致
  • 语法错误:grades(:,i)'jitter 是非法写法,scatter的jitter参数需作为独立参数传入
  • hold状态逻辑错误:循环内每次绘制完成即调用hold off,后续散点无法叠加到画布上,导致看起来循环仅执行一次
  • 冗余语法:函数末尾的break无对应循环结构,属于无效代码
  • 不符合需求:scatter自带的jitter仅对x坐标生效,无法实现题目要求的x、y同时加抖动的效果

修复后完整函数代码

function gradesPlot(grades)
figure(2);
clf; % 清空图窗避免历史内容干扰
n_assignments = size(grades, 2);
n_students = size(grades, 1);
hold on;

% 绘制带x/y双抖动的成绩散点
for i = 1:n_assignments
    % 生成x坐标:基础值为作业编号i,叠加-0.1~0.1的随机抖动
    x_jitter = repmat(i, n_students, 1) + (rand(n_students, 1) * 0.2 - 0.1);
    % 生成y坐标:原始成绩叠加-0.1~0.1的随机抖动
    y_jitter = grades(:, i) + (rand(n_students, 1) * 0.2 - 0.1);
    scatter(x_jitter, y_jitter, 30, 'filled', 'MarkerFaceColor', '#1f77b4');
end

% 绘制平均成绩折线
avg_grades = mean(grades, 1);
plot(1:n_assignments, avg_grades, 'color', '#ff7f0e', 'LineStyle', '-', ...
    'Marker', 'o', 'LineWidth', 2, 'MarkerFaceColor', '#ff7f0e');

% 配置坐标轴和标签
ylim([-3, 12]);
xticks(1:n_assignments);
title('每次作业成绩分布');
xlabel('作业编号');
ylabel('成绩');
hold off;
end

验证方式

使用你提供的测试矩阵调用函数即可正常出图:

grades = [[-3,4,10];[7,4,12];[7,10,12];[0,4,4];[2,2,2];[2,2,2]];
gradesPlot(grades);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 01:21:03