Histogram of multiple dataset with different dimension in Matlab

Viewed 296

I can plot multiple plots with a same dimension in a histogram

x = rand(1000,3);
hist(x);

enter image description here

But I could not plot multiple plots with a different dimension.

x1 = rand(1100,1);
x2 = rand(1000,1);
x3 = rand(900,1);
x = [x1 x2 x3]
hist(x)

I get the following error

Error using horzcat
Dimensions of arrays being concatenated are not consistent.

Please someone point me to right direction to solve the problem.

2 Answers

Triple Bar Histogram (3 datasets)

You can use the histogram() function and retrieve the .binCounts of each histogram and concatenate them in a fashion that gives a 10 by 3 array. By calling bar() on this 10 by 3 array you'll get a similar binning graph that shows the histogram of 3 datasets with the bins shown as triple bars. Also a good idea to use the histogram() function as the use of hist() is no longer recommended by MATLAB.

Triple Bar Histogram

x1 = rand(1100,1);
x2 = rand(1000,1);
x3 = rand(900,1);

h1 = histogram(x1);
Counts_1 = h1.BinCounts;
h2 = histogram(x2);
Counts_2 = h2.BinCounts;
h3 = histogram(x3);
Counts_3 = h3.BinCounts;

Bin_Edges = h3.BinEdges;
Bin_Width = h3.BinWidth;
Bin_Centres = Bin_Edges(1:end-1) + Bin_Width/2;

Counts = [Counts_1.' Counts_2.' Counts_3.'];
bar(Counts);
title("Triple Bar Histogram");
xlabel("Bin Centres"); ylabel("Count");
set(gca,'xticklabel',Bin_Centres);

Ran using MATLAB R2019b

Well the problem is indeed that you cant add non size matching vars.

Here is a patch work for you: the magic is the Nan variable that make your code match

% its bad habits but:
x1 = rand(1100,1);
x2 = rand(1000,1);
x3 = rand(900,1);

% make em' all the same size
max_size = max([length(x1),length(x2),length(x3)]);

% add in the ending nan 
x1 = [x1; nan(max_size-length(x1), 1)];
x2 = [x2; nan(max_size-length(x2), 1)];
x3 = [x3; nan(max_size-length(x3), 1)];

% plot em' bad
x = [x1 x2 x3];
figure;
hist(x)

Its working great now! (but you know its a bit of a Frankenstein masterpiece :-)

Related