Label bars of a histogram

13 ビュー (過去 30 日間)
MiauMiau
MiauMiau 2016 年 12 月 8 日
コメント済み: a a 2017 年 8 月 29 日
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

採用された回答

dpb
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
>>

その他の回答 (2 件)

Jiro Doke
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 件のコメント
MiauMiau
MiauMiau 2016 年 12 月 10 日
I did not know that! Many thanks...!!
a a
a a 2017 年 8 月 29 日
Thanks!! I've tried for hours until I found your solution

サインインしてコメントする。


Steven Lord
Steven Lord 2016 年 12 月 9 日
Try creating a categorical histogram (requires release R2015b or later.)
% 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.

カテゴリ

Help Center および File ExchangeData Distribution Plots についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by