【问题标题】:labels instead of color in bar plot条形图中的标签而不是颜色
【发布时间】:2013-06-20 02:00:21
【问题描述】:

我想在条形图中显示标签(如果可能,删除颜色)。例如,下面是一个创建彩色条形图的代码 sn-p:

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');

我想要的是这样的东西:

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

【问题讨论】:

  • 如果您发布示例输出图的图像会非常有帮助。
  • 没有简单的方法可以做到这一点。您可以使用text 在绘图中绘制文本,但在这种情况下您可能希望使用fill 自己绘制条形图。这很乏味。
  • 嗨,eitan...:(实际上我的声誉很低,所以我无法发送图像...但是如果您给我您的电子邮件地址,我会为您发送它
  • @EitanT 当然亲爱的 eitan,我会删除我的旧问题,我上传了我想要的图像。实际上在这个图像中,数据(数字)显示了矩阵 f 中的列。 imgur.com/S2kiTb8
  • @EitanT 谢谢亲爱的 eitan。

标签: matlab label bar-chart


【解决方案1】:

首先,要移除条的颜色(制作条),您可以使用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

这会产生以下情节:

玩得开心:)

【讨论】:

  • 您的回答非常好,亲爱的 eitan...您绝对是专家。非常感谢。 :)
  • @MahyarMajlesee 乐于助人! :)
【解决方案2】:

如果可以将标签放在 x 轴刻度标签中,请考虑改用 http://www.mathworks.com/matlabcentral/fileexchange/8722-rotate-tick-label。您也许可以修改它以自动将文本垂直放置在每个条形内,但我不建议这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多