histogram bins with different colors

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

 Respuesta aceptada

Scott MacKenzie
Scott MacKenzie el 26 de Abr. de 2021
Editada: Scott MacKenzie el 26 de Abr. de 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 comentarios

Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco el 27 de Abr. de 2021
Editada: Giuseppe Degan Di Dieco el 4 de Mayo de 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.
Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco el 4 de Mayo de 2021
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.
Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco el 18 de Mayo de 2021
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.
Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco el 18 de Mayo de 2021
Thanks Scott!
Wow, with your tip I got a figure that occupies the entire screen.
I didn't know it.
Best!

Iniciar sesión para comentar.

Más respuestas (1)

Giuseppe Degan Di Dieco
Giuseppe Degan Di Dieco el 4 de Mayo de 2021
Editada: Giuseppe Degan Di Dieco el 4 de Mayo de 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

Categorías

Más información sobre Data Distribution Plots en Centro de ayuda y File Exchange.

Productos

Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by