Matlab:在条形图上检测某个高度以上的峰值,并在峰值高度以上贴上标签

Matlab:在条形图上检测某个高度以上的峰值,并在峰值高度以上贴上标签,matlab,plot,label,bar-chart,Matlab,Plot,Label,Bar Chart,我正在尝试将标签添加到具有多个条形图的条形图中。复杂的因素是,我在一个循环中做这件事(数百个条形图),希望让Matlab自动做标记。本质上,我只想标记高度高于某个阈值的峰值。有一件事希望能让这更容易,那就是我只想用它的x值来标记这个条 以下是我希望如何放置标签的图示: 如果您仍然可以访问原始数据,并且假设您希望标记高于阈值的每个点,则您应该能够通过以下方式完成此操作: 在图表数据数组中的每个(x,y)上循环 如果y大于阈值 然后调用(x,y,num2str(x)) 如果你想用一个标签

我正在尝试将标签添加到具有多个条形图的条形图中。复杂的因素是,我在一个循环中做这件事(数百个条形图),希望让Matlab自动做标记。本质上,我只想标记高度高于某个阈值的峰值。有一件事希望能让这更容易,那就是我只想用它的x值来标记这个条

以下是我希望如何放置标签的图示:


如果您仍然可以访问原始数据,并且假设您希望标记高于阈值的每个点,则您应该能够通过以下方式完成此操作:

  • 在图表数据数组中的每个(x,y)上循环
    • 如果y大于阈值
      • 然后调用
        (x,y,num2str(x))

如果你想用一个标签来标记连续值都高于阈值的峰值(比如图像上大约115个),你可以添加一些稍微复杂的逻辑来将这些峰值组合在一起……如果这是你想要的,我们可以帮你弄清楚。

如果你仍然可以访问原始数据,假设您要标记高于阈值的每个点,您应该能够通过以下方式完成此操作:

  • 在图表数据数组中的每个(x,y)上循环
    • 如果y大于阈值
      • 然后调用
        (x,y,num2str(x))

如果你想用一个标签来标记连续值都高于阈值的峰值(比如图像上大约115个),你可以添加一些稍微复杂的逻辑来将这些峰值组合在一起……如果这是你想要的,我们可以帮你弄清楚。

如@Dougal所述,
text
功能就是您想要的。但是,不需要循环:

%# generate some data
y = poissrnd(5,20,1);
x = 1:20;
%# find where the data is above the threshold
bigIdx = y>6;

%# create a bar plot
bar(x,y)

%# add the text. The alignment setting ensures that the text
%# is directly above the bar. I add 1 here as an y-offset,
%# the ideal value may depend on your data
text(x(bigIdx),y(bigIdx)+1,num2str(x(bigIdx)),'horizontalAlignment','center')

%# you may need to make sure that the y-limit is high enough
%# so that the text is visible
ylim([0 max(y)+2])

正如@Dougal所提到的,
text
函数就是您想要的。但是,不需要循环:

%# generate some data
y = poissrnd(5,20,1);
x = 1:20;
%# find where the data is above the threshold
bigIdx = y>6;

%# create a bar plot
bar(x,y)

%# add the text. The alignment setting ensures that the text
%# is directly above the bar. I add 1 here as an y-offset,
%# the ideal value may depend on your data
text(x(bigIdx),y(bigIdx)+1,num2str(x(bigIdx)),'horizontalAlignment','center')

%# you may need to make sure that the y-limit is high enough
%# so that the text is visible
ylim([0 max(y)+2])

这似乎也是一个很好的解决方案,甚至可能更有效,但我已经实现了Dougal的解决方案,它对我来说运行良好。我一定会记住这一点。这似乎是一个很好的解决方案,甚至可能更有效,但我已经实现了Dougal的解决方案,它对我很有效。不过我一定会记住这一点。