我对scatter
情节有些疑问。
我正在为学生绘制一个包含每个作业成绩的矩阵,例如[作业x成绩],但如果多个学生在同一作业中获得相同的成绩,则这些成绩将相互叠加。我想在每个点的x坐标和y坐标上添加一个小的随机数(介于-0.1和0.1之间)。
在x轴上它应该是赋值的数量,在y轴上它应该是所有等级。
等级矩阵定义为12x4矩阵
我的代码如下所示:
n_assignments = size(grades,2); % Total number of assignments.
n_students = size(grades,1); % Total number of student.
hold on; % Retain current plot when adding new plots.
for i = 1:n_assignments % Loop through every assignment.
% Scatter plot of assignment vs grades for that assignment.
% One assignment on every iteration.
scatter(i*ones(1, n_students), grades(i, :), 'jitter', 'on', 'jitterAmount', 0.1);
end
hold off; % Set the hold state to off.
set(gca, 'XTick', 1:n_assignments); % Display only integer values in x-axis.
xlabel('assignment'); % Label for x-axis.
ylabel('grades'); % Label for y-axis.
grid on; % Display grid lines.
但我不断收到错误消息:
X and Y must be vectors of the same length.
答案 0 :(得分:3)
请注意,散点图抖动是未记录的 特征。您还可以使用半透明标记 散点图,这可能是另一种解决方案 目前的问题。
我将在此回答中介绍scatter
'jitter'
功能。
请注意,'jitter'
仅影响x轴,但不影响y轴(Undocumented Matlab上的更多信息)。
根据您的描述看看我做的这个例子:
假设您有一个有20名学生的班级,他们已完成5项作业。作业的成绩存储在矩阵(grades
)中,其中行是作业,列是学生。
然后,我只需在scatter
矩阵中生成一个grades
数据,一次一行,for
循环,然后使用hold on
保留所有数据同一图上的图形。
n_assignments = 5; % Total number of assignments.
n_students = 20; % Total number of students.
grades = randi(10, n_assignments, n_students); % Random matrix of grades.
hold on; % Retain current plot when adding new plots.
for i = 1:n_assignments % Loop through every assignment.
% Scatter plot of assignment vs grades for that assignment.
% One assignment on every iteration.
scatter(i*ones(1, n_students), grades(i, :), 'jitter', 'on', 'jitterAmount', 0.1);
end
hold off; % Set the hold state to off.
set(gca, 'XTick', 1:n_assignments); % Display only integer values in x-axis.
xlabel('assignment'); % Label for x-axis.
ylabel('grades'); % Label for y-axis.
grid on; % Display grid lines.
结果如下:
如果您仍想在y轴上添加抖动,则必须通过向grades
数据添加随机噪声来手动执行此操作,这是我个人不建议的,因为scatter
情节可能会混合,从而使情节完全不可靠。