Plot histograms of two samples as plots

I would like to plot the histograms of two samples as a line plot.
I've been using the histograms functions but this is not what I want. I would like the histogram to be a plot rather than histogram with boxes.
I would also like to plot the line plot of each sample in the same plot but using different colour. I would also like to fix the x- and y-axis.
Can someone help with this?

 Réponse acceptée

Adam Danz
Adam Danz le 30 Avr 2019
Modifié(e) : Adam Danz le 2 Mai 2019
"I would like the histogram to be a plot rather than histogram with boxes."
Option 1: Draw line at the center, top of each bar
I interpretted this as a line that traces the height of each bar of the histogram. Or, would you rather plot the probability density function? Here's a demo that achieves the prior.
% Create some fake data
a = randn(1, 10000).*100;
b = randn(1, 10000).*50;
% Create histogram bins
nBins = 50; %number of bins
aEdges= linspace(min(a),max(a), nBins+1);
bEdges= linspace(min(b),max(b), nBins+1);
figure
subplot(2,1,2)
histogram(a,aEdges);
hold on
histogram(b,bEdges);
subplot(2,1,1)
aX = aEdges(2:end)-((aEdges(2)-aEdges(1))/2); %bin centers
aCounts = histcounts(a,aEdges);
plot(aX, aCounts, 'b-s')
hold on
bX = bEdges(2:end)-((bEdges(2)-bEdges(1))/2); %bin centers
bCounts = histcounts(b,bEdges);
plot(bX, bCounts, 'r-s')
" I would also like to fix the x- and y-axis"
I'm not quite sure what you mean but perhaps ylim, xlim would help?
Option 2: Fit the histrogram with a smooth line
See the examples in the documentation

8 commentaires

Gina Carts
Gina Carts le 30 Avr 2019
Modifié(e) : Gina Carts le 30 Avr 2019
The first plot it's what I need. Can I plot only the line though? I mean without the squares on top of the line plot.
Adam Danz
Adam Danz le 30 Avr 2019
Modifié(e) : Adam Danz le 1 Mai 2019
I included the histogram too for visual comparison.
To plot without the square markers,
plot(aX, aCounts, 'b-s') %Change this...
plot(aX, aCounts, 'b-') %...to this
Gina Carts
Gina Carts le 2 Mai 2019
Why the number of bins has an effect in the y-axis (i.e. frequency)?
How do I know the correct number of bins? The information in y-axis isn't it important?
I attach a figure of my results. I used same data but in one case I used nBins=50 in the other case nBins=100.
Adam Danz
Adam Danz le 2 Mai 2019
"Why the number of bins has an effect in the y-axis (i.e. frequency)? "
In a histogram plot, the y-axis is frequency. For a bar that spans from x=0.01 to x=0.02 and has a height of y=112, that means there are 112 data points between the values of x=0.01 and x=0.02.
If you increase the width of the bar for the same dataset, the number of data points that fall within those bounds will increase.
So the wider the bars, the larger the counts.
"How do I know the correct number of bins? "
There is no correct answer but there are often wrong answers. Some bad science results from chosing bin widths that make your data appear to have different distributions or densities. Sometimes thinking about your data will help with that decision if there are natrual intervals within your data. Sometimes thinking about the question you're asking will help with that decision.
"The information in y-axis isn't it important?"
Yes. It tells you how often (frequency) your data fall into each bin. I can't say whether that's what you're looking for or not. You could plot a normalized histogram where all the bars hights add to 1.0. You could normalize the histrogram so the tallest bar is always equal to 1. You could plot the underlying density function. There's lots of options but it all comes down to what you're trying to do.
Lastly, I'll update my answer with an alternative method that adds a smooth, fitted line.
I wanted to modify the y-axis and put my limits but I cannot do it.
I set my own edges and y-axis limit. Below it's my code
a = randn(1, 10000).*100;
b = randn(1, 10000).*50;
aEdges=-1:0.025:1;
bEdges=-1:0.025:1;
figure
subplot(2,1,2)
histogram(a,aEdges);
hold on
histogram(b,bEdges);
subplot(2,1,1)
aX = aEdges(2:end)-((aEdges(2)-aEdges(1))/2);
aCounts = histcounts(a,aEdges);
plot(aX, aCounts, 'b-s')
axis([0,1,0,0.15])
hold on
bX = bEdges(2:end)-((bEdges(2)-bEdges(1))/2);
bCounts = histcounts(b,bEdges);
plot(bX, bCounts, 'r-s')
axis([0,1,0,0.15])
When I use your code I get the correct shape of my distributions but I want to set my own limits.
Adam Danz
Adam Danz le 28 Mai 2019
Have you tried ylim() ?
Gina Carts
Gina Carts le 28 Mai 2019
Yea the ylim() works. Is there any way to make the lines on the plot thicker?
plot(x,y,'LineWidth', 3)
% or
h = plot(x,y);
h.LineWidth = 3;
% or
set(h, 'LineWidth', 3)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

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

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by