Label bars of a histogram
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuesta aceptada
dpb
el 8 de Dic. de 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 comentarios
Más respuestas (2)
Jiro Doke
el 8 de Dic. de 2016
Editada: Jiro Doke
el 8 de Dic. de 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 comentarios
Steven Lord
el 9 de Dic. de 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 comentarios
Ver también
Categorías
Más información sobre Data Distribution Plots en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!