Label bars of a histogram
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Akzeptierte Antwort
dpb
am 8 Dez. 2016
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 Kommentare
Weitere Antworten (2)
Jiro Doke
am 8 Dez. 2016
Bearbeitet: Jiro Doke
am 8 Dez. 2016
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 Kommentare
Steven Lord
am 9 Dez. 2016
% 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 Kommentare
Siehe auch
Kategorien
Mehr zu Data Distribution Plots finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!