【问题标题】:highlighted region in 2d line plot二维线图中突出显示的区域
【发布时间】:2012-07-21 18:08:34
【问题描述】:

下面的代码突出显示了绘图的某些区域:

x = 1:24;
a = 1;
b = 50;
y = a + (b-1).*rand(length(x),1);

plot(x,y);

%find the peaks in the data and hilghlight the regions
[pks,locs] = findpeaks(y);

for i = 1:length(locs);
    h = area([locs(i)-(locs(i)/100) locs(i)+(locs(i)/100)],[max(y) max(y)]);
    set(h,'FaceColor',[.5,.5,.5]);
    set(h,'EdgeColor',[.5,.5,.5]);
    h1 = get(h,'children');
    set(h1,'FaceAlpha',0.3);
    hold on
end
    plot(x,y,'k');
    hold off;
    axis([min(x) max(x) min(y) max(y)]);

突出显示的区域定义为局部最大值两侧数据长度的 1%。我想进行更改,以便该区域不是由数据的百分比精确指定的,因为这将根据数据集的大小而改变。谁能建议一种替代方法来定义突出显示区域的厚度?

【问题讨论】:

  • 我的回答是否解决了您的问题/疑问?这里的礼仪是,当你发布一个问题时,你至少会跟进它:)

标签: matlab plot


【解决方案1】:

我会说这样的参数应该被视为常量,就像您将 xab 视为常量一样。

我会为突出显示的区域定义一个恒定宽度w

w = 1.0;

那么绘制区域的代码行将在当前峰值的每一侧为 w/2:

h = area( ...
   [locs(i)-(w/2) locs(i)+(w/2)], ...
   [max(y) max(y)] ...
);

调整w 使其符合您当前的需求。

【讨论】:

  • 老实说,我一直在寻找一个更复杂的答案,而不是简单地在峰的任一侧使用 +-1。
  • 嗯...我不知道 :) 什么是复杂的?最简单的解决方案总是最好的。您尚未定义要绘制的数据类型。这就是为什么我只是设置手动边距。作为情节的设计者,您可以决定突出显示的宽度。你可以去“复杂”并使用w = pi;。甚至w = 1.066;那会为你解决吗?
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多