散点图matlab

Scatterplot matlab

我的 scatter 情节有些问题。

我正在绘制一个矩阵,其中包含学生每次作业的成绩,例如[assignments x grades],但如果不止一名学生在同一作业中获得相同成绩,则分数将相互叠加。我想向每个点的 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.

Please note that the scatter plot jitter is an undocumented feature. You can also have semi-transparent markers in line and scatter plots, which could be another alternative to solve your current problem.

我将在本回答中介绍 scatter 'jitter' 功能。

请注意,'jitter' 仅影响 x 轴而不影响 y 轴(有关 Undocumented Matlab 的更多信息)。

看看我根据你的描述做的这个例子:

假设您的 class 有 20 名学生,他们完成了 5 项作业。作业的成绩存储在矩阵 (grades) 中,其中行是作业,列是学生。

然后我简单地在 grades 矩阵中生成数据的 scatter 图,一次一行,在 for loop and using 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 情节中的成绩可能会混合,从而使情节完全不可靠。