在条形图上叠加标记

时间:2015-09-18 12:40:41

标签: matlab plot bar-chart

我使用表示群体方式的条形图创建一个数字。

我有一个矩阵告诉我这些方法是否在统计上有所不同。

sign_diff =

     0     0     0     1
     0     0     0     1
     0     0     0     0
     1     1     0     0

在这种情况下,第一组和第二组的平均值与第四组的平均值显着不同。

如何阅读矩阵:

第一行:最后一列中有一个 - >第一个酒吧与酒吧4不同,因此酒吧1和酒吧4获得一颗星。

第二行:最后一列中有一个 - >第二个酒吧与酒吧4不同,因此酒吧2和酒吧4获得一颗星。更多,因为条1和条2之间没有区别,条形1和条形2中的星形应该处于相同的高位

如何在不同的条形图上添加标记? 我想有这样的事情:

请注意,前两颗星应处于相同的水平,表示bar1和bar2没有区别,但它们都与bar4不同(那么第4栏顶部的星形应该更高)

希望你能帮助我

enter image description here

1 个答案:

答案 0 :(得分:2)

我仍然不确定我是否完全掌握了高度逻辑(我们没有functioning example),但同时对叠加问题有一个简单的答案。您可以使用line将星星叠加到地块上。

例如:

y = [1 2 3 4];
bar(y);
ylim([0 6]);

sign_diff = [0 0 0 1; 0 0 0 1; 0 0 0 0; 1 1 0 0];

needs_star = (sum(sign_diff) ~= 0); % See which bars need a star
star_heights = sum(sign_diff).*0.75;

star_x = 1:length(y);
star_y = max(y) + star_heights;

star_x = star_x(needs_star);
star_y = star_y(needs_star);


line(star_x, star_y, ...
    'linestyle', 'none', ...
    'marker', 'p', ...
    'markersize', 15 ...
    );

产生以下内容:

enter image description here

line接受XY输入,因此如果您可以根据sign_diff矩阵为星标创建坐标,则可以在line调用中使用它们。

编辑:我已经更新了我的计算结果。根据您的数据需要进行一些调整。 ylimmax调用需要根据图表中数据的最大高度进行调整,以便将所有内容都放入轴中,并确保没有重叠。您可以将0.75值调整为您想要的任何值,以便充分显示差异。这可能不是最有效的方法,但行为至少是明确的。