Dividing part of a histogram
12 ビュー (過去 30 日間)
古いコメントを表示
I want to plot a histogram but with divided parts. For example; it has four colums of age: 0-4, 4-8, 8-12 and 12-16. I want to divide 0-4 column into 5 parts, 4-8 into 10 parts. Is it possible?
5 件のコメント
Dyuman Joshi
2023 年 7 月 14 日
It's not clear to me what your data is or what you are plotting.
Is your data the numbers in circles?
回答 (4 件)
Florian Bidaud
2023 年 7 月 14 日
編集済み: Florian Bidaud
2023 年 7 月 14 日
Let's say your data is stored like :
y = [2 8 5 10]
Where y(1) is your 0-4 range, y(2) your 5-8 range etc.
Then you could do something like
y_new = [];
for i = 1:2
y_new = [y_new repmat(y(i),1,5*i)];
end
y_new = [y_new y_new(3) y_new(4)]
and then use y_new to plot your histogram
However, from what I understood from your graph, your new histogram wouldn't represent the same thing as before, as each colomn would be equal to the total of the range.
0 件のコメント
Image Analyst
2023 年 7 月 14 日
1 件のコメント
Steven Lord
2023 年 7 月 14 日
Or if you've already created a histogram, set its BinEdges property to the more refined bin edge vector or call the morebins or fewerbins functions with the histogram handle as input.
x = randn(1, 1e5);
h = histogram(x, -3:0.1:3); % bins with width of 0.1
figure % Making a second copy so you can compare original and modified
h = histogram(x, -3:0.1:3);
h.BinEdges = -3:0.25:3; % bins with width of 0.25
figure % third copy
h = histogram(x, -3:0.1:3);
fprintf("Before morebins call, histogram has %d bins.\n", h.NumBins)
morebins(h);
fprintf("After morebins call, histogram has %d bins.\n", h.NumBins)
h.BinWidth % no longer width of 0.1
davut
2023 年 7 月 14 日
1 件のコメント
Dyuman Joshi
2023 年 7 月 14 日
You have not answered my queries nor have you provided enough information for us to give a particular solution for your question.
@Image Analyst and @Steven Lord have given a general solution to the problem you have posted. If you want a "useful" solution, you will have specify "useful" details.
Image Analyst
2023 年 7 月 14 日
I think you may have overlooked my suggestion to use linspace to compute the edges, or you just coudn't figure it out. So here it is:
% For example; it has four colums of age: 0-4, 4-8, 8-12 and 12-16.
% I want to divide 0-4 column into 5 parts, and
% 4-8 into 10 parts. Is it possible?
edges1 = linspace(0, 4, 5+1);
edges2 = linspace(4, 8, 10+1);
edges = unique([edges1, edges2, 8, 12, 16])
% Create sample data.
data = 5 + 2 * randn(1, 1000);
% Compute and plot histogram.
histogram(data, edges);
grid on;
ylabel('Count');
xlabel('Data Value');
Note that there are 5 bins between 0 and 4, 10 bins between 4 and 8, and then one bin from 8-12, and one bin from 12 to 16, just like you said you wanted.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Data Distribution Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!