【问题标题】:superimpose marker on barplot在条形图上叠加标记
【发布时间】:2015-09-18 12:40:40
【问题描述】:

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

我有一个矩阵,它告诉我平均值在统计上是否不同。

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顶部的星应该更高)

希望你能帮助我

【问题讨论】:

  • 从你的矩阵中,我不明白为什么小节 4 得到星,而小节 3 没有?
  • 对不起,如果我不完全清楚...行和列表示条号:第一行:最后一列中有一个 1 -> 第一个条与条 4 不同,所以条 1 和栏 4 获得一颗星
  • 第二行:最后一列有一个 1 -> 第二个小节与小节 4 不同,因此小节 2 和小节 4 获得星号。由于第 1 条和第 2 条之间没有区别,因此第 1 条和第 2 条中的星星应该处于相同的高度

标签: matlab plot bar-chart


【解决方案1】:

我仍然不确定我是否完全掌握了高度逻辑(我们没有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 ...
    );

产生以下内容:

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

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

【讨论】:

  • 嗨!感谢您的回答,但我正在寻找的是一种“自动”的方式来了解从 sign_diff 矩阵中放置星星的位置
  • @gabboshow 我已经更新了我的答案与逻辑的镜头
猜你喜欢
  • 2021-03-21
  • 2013-03-03
  • 1970-01-01
  • 2020-03-06
  • 2014-03-16
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多