在条形图上叠加标记

superimpose marker on barplot

我使用代表组均值的条形图创建了一个图形。

我有一个矩阵可以告诉我均值在统计上是否不同。

sign_diff =

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

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

如何读取矩阵:

第一行:最后一列有一个 1 -> 第一个小节与第 4 小节不同,因此第 1 小节和第 4 小节得到一个星号。

第二行:最后一列中有一个 1 -> 第二个小节与第 4 个小节不同,因此第 2 小节和第 4 个小节得到一个星号。由于第 1 条和第 2 条没有区别,因此第 1 条和第 2 条中的星星应该处于相同的高度

如何在不同的条形图顶部添加标记? 我想要这样的东西:

请注意,前两颗星应该在同一水平,表示bar1和bar2没有区别,但它们都不同于bar4(那么bar 4上面的星应该更高)

希望你能帮助我

我仍然不确定我是否完全掌握高度逻辑(而且我们没有 functioning example) but in the meantime there's a simple answer the superimposition question. You can use 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 ...
    );

生成以下内容:

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

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