2017-05-04 134 views
1

我有一些scatter情节的问题。Scatterplot matlab

我正在为学生绘制一个包含每个作业分数的矩阵,例如, [作业x成绩],但是如果不止一名学生在同一作业中获得相同成绩,则成绩将相互重叠。我想在每个点的x和y坐标上添加一个小的随机数(在-0.1和0.1之间)。

在x轴上,它应该是分配数量,在y轴上它应该是所有等级。

档次矩阵被定义为12×4矩阵

我的代码如下所示:

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. 

回答

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. 

这是结果:

Scatter plot with jitter


如果你仍想在y轴增加抖动,你就必须通过将随机噪声做手工你grades数据,这是我个人不会推荐的,因为scatter情节中的等级可能会混合,从而导致情节完全不可靠。

+0

这正是我想要的,但是,当我尝试写出更多基因时,我无法让它正常工作,它不会绘制所有分数。 我对代码进行了如下更改: '将等级定义为12x4矩阵 n_assignments = size(等级,2); n_students =大小(等级,1); 坚持; (i,1,n_students),等级(i,:),'jitter','on','jitterAmount',0.1);对于i = 1:n_assignments scatter 结束 拖延; set(gca,'XTick',1:n_assignments);' 但它给了我错误消息:错误使用分散(第61行) X和Y必须是相同长度的向量。 – Ryan

+0

@Ryan请你可以编辑你的问题,并在下面添加新的代码(不删除你已经写过的内容)。评论通常不是分享代码的理想场所。谢谢。 – codeaviator

+0

我们得到它的工作,感谢您的帮助! – Ryan