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
相关产品推荐
相关产品推荐

