Label bars of a histogram
13 ビュー (過去 30 日間)
古いコメントを表示
Hi,
I construct a histogram with Matlab's "bar" function. The bins are constructed as follows:
n = 8;
binranges = linspace(min(values), max(values),n+1);
"values" are just some measured values which I want to plot as bars. Now I want to label all the bins accordingly with their ranges. So if for instance binranges gives me the following:
binranges =
Columns 1 through 8
0.7175 0.7447 0.7718 0.7990 0.8262 0.8533 0.8805 0.9077
Column 9
0.9348
I would like to have the bars labeled as "0.7175-0.7447", "0.7447-0.7718" and so on.. For including a dash I guess I need to convert everything to strings as well, which I then could use as an input to the following statement:
set(gca, 'XTickLabel',...)
How do I do that most efficiently? Many thanks
0 件のコメント
採用された回答
dpb
2016 年 12 月 8 日
set(gca, 'XTic',binranges)
will use the bin values for ticks.
It's not as trivial to label the bin ranges as tick labels are associated with the location of the associated ticks rather than between, plus you'll almost certainly run out of room for the amount of text you're trying to write.
But, it's simple-enough to build a string array to use
>>labels=num2str([[0 binranges].' [binranges inf].'],'%0.2f-%0.2f')
labels =
0.00-0.72
0.72-0.74
0.74-0.77
0.77-0.80
0.80-0.83
0.83-0.85
0.85-0.88
0.88-0.91
0.91-0.93
0.93-Inf
>>
0 件のコメント
その他の回答 (2 件)
Jiro Doke
2016 年 12 月 8 日
編集済み: Jiro Doke
2016 年 12 月 8 日
A number of ways, but here is one:
label = arrayfun(@(x,y) sprintf('%g - %g',x,y), ...
binranges(1:end-1), binranges(2:end), ...
'UniformOutput', false);
Then, set the axes properties.
set(gca,'XTick',(binranges(1:end-1)+binranges(2:end))/2,...
'XTickLabel',label,...
'XTickLabelRotation',30)
7 件のコメント
Steven Lord
2016 年 12 月 9 日
% Create some sample data
values = [0.7175 0.9348];
n = 8;
binranges = linspace(min(values), max(values),n+1);
x = values(1)+(values(2)-values(1))*rand(1, 100);
% Create a categorical array from the data
% Use binranges to define categories
C = discretize(x, binranges, 'categorical');
% Create the categorical histogram
histogram(C)
The format of the categories / tick labels are different than what you suggested but in my opinion the meaning of those labels should be clear. If you have a hard requirement to use the specific format you described you could use Jiro's arrayfun call to create a list of category names then pass that into discretize after the 'categorical' flag.
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!