Running the following code from the command line with c = 1e-15 or greater leads to a normal histogram
c = 1e-15; figure; histogram(c * rand(100,1))
histogram1.JPG
Running the following code with c = 1e-16 or less leads to an incorrect histogram
c = 1e-16; figure; histogram(c * rand(100,1))
histogram2.JPG
The problem appears also in apps when the histogram function is invoked.
Is this a bug?
Gordon

 채택된 답변

Bruno Luong
Bruno Luong 2019년 9월 7일
편집: Bruno Luong 2019년 9월 7일

2 개 추천

Yes it is a BUG. I chase back and in the file
C:\Program Files\MATLAB\R2019a\toolbox\matlab\datafun\+matlab\+internal\+math\binpicker.m
line #20 (R2019a)
there is a test
if xrange > max(sqrt(eps(xscale)), realmin(class(xscale)))
To me the correct test should be (without sqrt)
if xrange > max(eps(xscale), realmin(class(xscale)))
Now if I change this line and rerun the code
c = 1e-16; figure; histogram(c * rand(100,1))
it produces correct plot
More seriously, the function binpicker is called by HISTCOUNT. So HISTCOUNT is also buggy. Not only plotting but calculation might be wrong.

댓글 수: 1

Thanks for your reply.and I believe that you have spotted the error in function binpicker.Since eps(x) ~ 1e-16*x, and in my case xscale and xrange are nearly equal, the condition that
xrange > sqrt(eps(xscale))
leads to xrange >~ 1e-16 which is what I find.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Jackson Burns
Jackson Burns 2019년 9월 7일

0 개 추천

Here's a similar question asked a few years ago which was never really solved either. This comment may be your best approach, but I would reccomend just bringing the values to unity with something like this:
c = 1E-16;
figure
mydata = c * rand(100,1);
histogram(mydata./max(mydata))
You could then modify the xticklabels to match whatever the original values were.

카테고리

도움말 센터File Exchange에서 Data Distribution Plots에 대해 자세히 알아보기

제품

릴리스

R2019a

질문:

2019년 9월 6일

댓글:

2019년 9월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by