为矩阵中的每列创建多个直方图

时间:2015-07-08 19:35:16

标签: matlab

我想循环遍历306X20矩阵中的每一列,NaN值填充空白区域,我想为每一行创建一个直方图(以20个直方图结束)。最好的方法是什么?我想实现的伪代码:

For i = 1:(number of columns)
     % Loop through each column to generate a different histogram with the same
     % x and y labels and title
     % hist(data, 20)
end

谢谢

2 个答案:

答案 0 :(得分:2)

我假设您想为每个直方图分别绘制一个数字。这可以通过for循环和figure - 语句轻松实现,以在每次迭代中打开一个新数字。在Matlab版本R2014b及更高版本中,使用histogram - 函数绘制直方图,在R2014b以下版本中使用hist代替(hist仍在R2014b及以上版本中工作)。这两个函数都忽略了NaN - 数据集中的值。

% generate random data with NaN-values
x = randn(306,20);
a = randi(5,[306,20]);
x(a==3) = NaN;

% plot the histograms
for i = 1:size(x,2)
    figure;
    histogram(x(:,i)) % before R2014b use "hist" instead
    title(['Histogram of row ',num2str(i)]);
    xlabel('Bins');
    ylabel('Frequency');
end

这为最后一行提供了以下结果: result

答案 1 :(得分:0)

您可以使用uniquebsxfun的组合。结果将是包含唯一值的单元格数组values和包含这些值出现的count

A= [1 2 5; 1 7 NaN]; % // Test data

% // Convert it to a cell array so that we can apply a function to each row
B=mat2cell(A, [size(A,1)] ,[ones(size(A,2),1).']);

% // Find the unique values
[values,ia,indvalues]=cellfun(@unique,B,'UniformOutput',false);

% // Count the unique occurrencies.
count = cellfun(@(M) sum( bsxfun(@eq, M, unique(M)') )', B, 'UniformOutput',false);


>> values{1}

ans =

 1

>> count{1}

ans =

     2