Hello Everybody,
I'd be glad if you could help me in building a histogram with different color for each histogram bin.
Before asking, I've tried to define for loops and a matrix of colors, without succeding.
My problem is that T.ConstructionYear is a 1531 x 1 numeric vector, and I'd have a different color for each bin. I left auto mode for the number of bins choice.
I've also tried to write the function for just two bins.
Thanks in advance for the help.
h1 = histogram(T.ConstructionYear, 'FaceColor', 'b');
xlabel('ConstructionYear');
ylabel('Number of Bridges');
title('Distribution of Construction Year Data');

 Réponse acceptée

Scott MacKenzie
Scott MacKenzie le 26 Avr 2021
Modifié(e) : Scott MacKenzie le 26 Avr 2021
I'm not sure if you can do this with histogram. Here's what I put together using histcounts and bar instead:
d1 = rand(1531,1); % put your T.ConstructionYear data here
myColor = rand(10,3); % 10 bins/colors with random r,g,b for each
d2 = histcounts(d1);
b = bar(d2, 'facecolor', 'flat');
b.CData = myColor;
xlabel('ConstructionYear');
ylabel('Number of Bridges');
title('Distribution of Construction Year Data');

5 commentaires

Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco le 27 Avr 2021
Modifié(e) : Giuseppe Degan Di Dieco le 4 Mai 2021
Dear Scott,
thanks for your reply and help.
I saw various posts before posting mine, but weren't so clear.
I'll try your solution and will let you know; I owe you a favour then.
I'll also search for the documentation about the functions you used.
Best regards, and thanks againg.
Dear Scott,
I've tried your solution and it works!
Thanks a lot, also because in a few lines you gave me many insights of computations, such as the histcounts and bar functions, and of coding, defining a vector with random values.
My very best wishes.
hope you're still reading this thread, just to thank you again for your teaching;
it made me realised the below graph.
Best from Bristol.
Yup. Still getting threads here. Nice work. Congratulations. Arch masonry bridges rule! :)
You've got a lot going on in that chart. Are you using "full screen"? You can do this using
f = gcf;
f.WindowState = 'maximize'; % full screen
You can also play with the size of the tick label fonts using the axis FontSize property. Good luck.
Thanks Scott!
Wow, with your tip I got a figure that occupies the entire screen.
I didn't know it.
Best!

Connectez-vous pour commenter.

Plus de réponses (1)

Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco le 4 Mai 2021
Modifié(e) : Giuseppe Degan Di Dieco le 4 Mai 2021
As a follow up to this thread, I've developed the below script to show the legend of multiple bars.
I've found some posts on this wonderful community, and then put them together.
%How to have a legend for each bin. For starting, trial with two bins and
%with a for loop
d1 = rand(2, 1); %a random-value 2 x 1 vector
myColor = rand(2, 3); %2 bins/color triplet with random r, g, b for each
d2 = histcounts(d1); %apply the histcounts function to the data
hold on
for i = 1:length(d1)
b = bar(d1(i), d2);
b.CData(i, :) = myColor(i, :);
end
b.BarWidth = 0.4;
xlabel('Construction Year');
ylabel('Number of Bridges');
title('Distribution of Construction Year Data');
legend('location', 'bestoutside')
hold off

Catégories

En savoir plus sur Data Distribution Plots dans Centre d'aide et File Exchange

Produits

Version

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by