我想在条形图中显示标签(如果可能,请删除颜色)。例如,这是一个代码片段,用于创建彩色条形图:
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');
我想要的是这样的东西:
我该怎么办?你可以帮帮我吗?提前谢谢!
答案 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
这会产生以下情节:
玩得开心:)
答案 1 :(得分:0)
如果可以将标签放在x轴刻度标签中,请考虑使用http://www.mathworks.com/matlabcentral/fileexchange/8722-rotate-tick-label。您可以修改它以自动将文本垂直放在每个栏中,但我不推荐它。