【问题标题】:Scatterplot matlab散点图matlab
【发布时间】:2017-05-04 10:52:55
【问题描述】:

我对@9​​87654321@ 绘图有一些问题。

我正在为学生绘制一个包含每个作业成绩的矩阵,例如[作业 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.

【问题讨论】:

    标签: matlab scatter-plot scatter


    【解决方案1】:

    请注意,散点图抖动是未记录的 特征。您还可以将半透明标记排成一行,并 散点图,这可能是解决您的另一种选择 当前的问题。

    我将在此答案中介绍 scatter 'jitter' 功能。

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

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

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

    然后我只是在grades 矩阵中生成一个scatter 数据图,一次一行,在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 数据来执行此操作,我个人不建议这样做,因为 @ 中的等级987654337@ 情节可能会混在一起,从而使情节完全不可靠。

    【讨论】:

    • 这正是我想要的,但是,当我尝试写它更一般的时候,我无法让它正常工作,它并没有绘制所有的成绩。我对代码进行了以下更改:grades is difined as a 12x4 matrix n_assignments = size(grades,2); n_students = size(grades,1); hold on; for i = 1:n_assignments scatter(i*ones(1, n_students), grades(i, :), 'jitter', 'on', 'jitterAmount', 0.1); end hold off; set(gca, 'XTick', 1:n_assignments); 但它给了我错误消息:使用散点图时出错(第 61 行)X 和 Y 必须是相同长度的向量。
    • @Ryan 请您编辑您的问题并在下面添加新代码(不删除您已经编写的内容)。注释通常不是共享代码的理想场所。谢谢。
    猜你喜欢
    • 2013-08-17
    • 2013-08-31
    • 2013-02-12
    • 2013-12-17
    • 2015-08-27
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多