Plot histograms of two samples as plots
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
0 개 추천
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.
Adam Danz
2019년 5월 28일
Have you tried ylim() ?
Gina Carts
2019년 5월 28일
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)
