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?
采纳的回答
"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"
Option 2: Fit the histrogram with a smooth line
See the examples in the documentation
8 个评论
Gina Carts
2019-4-30
编辑:Gina Carts
2019-4-30
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.
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
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.
"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.
Have you tried ylim() ?
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)
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Data Distribution Plots 的更多信息
产品
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
