2017-05-04 58 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