Swapping from hist to histogram
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
Hi, under the recommendation of Steven Lord, I am trying to update my code and not use hist as the histogram function and instead use histogram
I previously did this:
[counts,xb]=hist(data(:,3),nbins); %IMHIST ONLY HANDLES 8 & 16 BIT IMAGES, NOT 12BIT
figure
ax1=subplot(1,2,1);
bar(xb,counts,'b','EdgeColor','b');
grid on
%Now get the max frequency.
mxC=max(counts);
indx=find(counts==mxC);
xmx=xb(indx);
hold on;
lineH1=plot([xmx xmx],ylim,'r--','LineWidth',1);
hold off
So when I swap over to the histogram function, I can get the y-axis values but not the x-axis values
h=histogram(data(:,3),nbins)
counts=h.Values % frequency (i.e. y-axis)
How do I get the mode of this histogram and plot it?
Thanks Jason
採用された回答
Star Strider
2017 年 2 月 19 日
One approach:
data = randi(99, 1, 100);
nbins = 25;
h = histogram(data, nbins);
counts = h.BinCounts;
edges = h.BinEdges;
width = h.BinWidth;
ctrs = edges(1:end-1) + width/2;
MaxCountsV = counts >= max(counts); % Logical Vector
Desired_Output = [ctrs(MaxCountsV), counts(MaxCountsV)] % [BinCentre, Counts]
It’s essentially self-documenting with the variable names. The output displays the bin centre corresponding to the maximum count.
You could make this a bit more efficient if you need to. My objective here is to leave a clear trail so you know how I got the result.
11 件のコメント
Jason
2017 年 2 月 19 日
Thankyou
Star Strider
2017 年 2 月 19 日
My pleasure.
Jason
2017 年 2 月 20 日
Is it too late to ask how to force the number of bins such that each bin is an integer i.e. 1,2,3 all the way upto the max value in my image?
Star Strider
2017 年 2 月 20 日
It’s never too late, although I’m not at my computer 24x7 so delays are occasionally inevitable.
From the documentation:
- histogram(X,edges) sorts X into bins with the bin edges specified by the vector, edges. Each bin includes the left edge, but does not include the right edge, except for the last bin which includes both edges.
Specifying the bin edges (ranges) is certainly an option. You will have to experiment to get the result you want.
Jason
2017 年 2 月 20 日
Thank you
Star Strider
2017 年 2 月 20 日
My pleasure.
So I have tried to play with this. I have created my edges:
edges=[1:max(data)]
h=histogram(data,edges) ;
counts=h.Values;
bar(edges,counts,'g','EdgeColor','g');
but when I try to bar chart this,
as the length of edges is 1 more than the counts
Error using bar (line 143)
X must be same length as Y.
Image Analyst
2017 年 2 月 20 日
Look at the lengths of edges and counts. edges has one more element. So you need to decide if you want the left edge, right edge, or center of the bin. To get the left edges:
bar(edges(1:end-1), counts, 'g', 'EdgeColor', 'g');
Jason
2017 年 2 月 20 日
Thanks
Steven Lord
2018 年 11 月 29 日
I happened upon this message while doing searching for another message. About the follow-up question about making each integer a different bin, when you call histogram specify the name-value pair 'BinMethod', 'integers' instead of specifying bin edges and histogram will automatically create edges with one integer per bin (unless your data spans too wide a range, in which case the bins will be wider than 1, as stated in the entry for 'integers' in the documentation of the BinMethod argument.)
Jason
2019 年 1 月 10 日
thankyou for this.
その他の回答 (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!Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の 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)
