条形图中的标签而不是颜色

时间:2013-06-23 12:12:13

标签: matlab label bar-chart

我想在条形图中显示标签(如果可能,请删除颜色)。例如,这是一个代码片段,用于创建彩色条形图:

S=[1 4 1 2 3 4];
R=[4 4 4 10 6 1];
f=zeros(5,6);
for i=1:5
 for j=1:numel(S)
     if S(j)==i
     f(i,j)=R(j);
  end
 end
end
barplot=bar(f,'stacked');

我想要的是这样的东西:

enter image description here

我该怎么办?你可以帮帮我吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

首先,要删除条形的颜色(制作条形图),您可以使用bar返回的句柄向量:

set(barplot, 'FaceColor', 'w'); % // w = white

向条形图添加文本有点棘手 - 您必须使用text添加单个文本标签,为此,您必须计算每个标签的x和y坐标。以下是它的完成方式:

H = nonzeros(R) / 2;            % // Relative offset of each text label 
Y = cumsum(f, 2);
Y = nonzeros(Y(f > 0)') - H;    %'// Y coordinates of text labels
X = S - 0.2;                    % // X coordinates of text labels
for k = 1:numel(Y)
    text(X(k), Y(k), labels{k}) % // Show text label
end

其中labels是要显示的文本字符串的cell array

顺便说一句,您可以将两个嵌套循环减少为一个语句:

f = full(sparse(S, 1:numel(S), R, 5, numel(S)));

实施例

S = [1 4 1 2 3 4];
R = [4 4 4 10 6 1];

%// Bar plot
f = full(sparse(S, 1:numel(S), R, 5, numel(S)));
barplot = bar(f, 'stacked');

%// Set color of bars to white
set(barplot, 'FaceColor', 'w')

%// Add text labels
labels = {'data1', 'data2', 'data3', 'data4', 'data5', 'data6'};
H = nonzeros(R) / 2;
Y = cumsum(f, 2);
Y = nonzeros(Y(f > 0)') - H;     %'// Y coordinates
X = S - 0.2;                     % // X coordinates
for k = 1:numel(Y)
    text(X(k), Y(k), labels{k})
end

这会产生以下情节:

result

玩得开心:)

答案 1 :(得分:0)

如果可以将标签放在x轴刻度标签中,请考虑使用http://www.mathworks.com/matlabcentral/fileexchange/8722-rotate-tick-label。您可以修改它以自动将文本垂直放在每个栏中,但我不推荐它。