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');

 Akzeptierte Antwort

Scott MacKenzie
Scott MacKenzie am 26 Apr. 2021
Bearbeitet: Scott MacKenzie am 26 Apr. 2021

2 Stimmen

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 Kommentare

Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco am 27 Apr. 2021
Bearbeitet: Giuseppe Degan Di Dieco am 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!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco am 4 Mai 2021
Bearbeitet: Giuseppe Degan Di Dieco am 4 Mai 2021

0 Stimmen

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

Produkte

Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by