在MATLAB中突出显示特定的图形部分

时间:2018-01-17 10:35:33

标签: matlab plot highlight

我希望通过MATLAB中的绘图突出显示/标记数组的某些部分。经过一些研究(like here)后,我试图抓住第一个情节,找到突出显示的指数,然后找到一个新情节,只有这些点。但是,这些点正在绘制,但都转移到轴的开头:

Status

我目前正在尝试使用此代码:

load consumer;   % the main array to plot (157628x10 double) - data on column 9
load errors;     % a array containing the error indexes (1x5590 double)

x = 1:size(consumer,1)';      % returns a (157628x1 double)
idx = (ismember(x,errors));   % returns a (157628x1 logical)

fig = plot(consumer(:,9));
hold on, plot(consumer(idx,9),'r.');
hold off

我想做的另一件事是突出显示图表的整个部分,就像同一部分的“补丁”一样。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

问题是您只是将y轴数据提供给绘图功能。默认情况下,这意味着所有数据都会绘制在绘图的1:numel(y) x位置,其中y是您的y轴数据。

你有两个选择......

  1. 还提供x轴数据。你已经得到了数组x了!

    figure; hold on;
    plot(x, consumer(:,9));
    plot(x(idx), consumer(idx,9), 'r.');
    

    除此之外:我有点困惑为什么要创建idx。如果errors与您描述的一样(数组的索引),那么您应该只能使用consumer(errors,9)

  2. 使您不希望显示的所有数据等于NaN。由于您加载错误索引的方式,这不是那么快速和简单。基本上你将consumer(:,9)复制到一个新变量中,并将所有不需要的点编入索引,将它们设置为等于NaN

    这种方法也有破坏不连续部分的好处。

    y = consumer(:,9);          % copy your y data before changes
    idx = ~ismember(x, errors); % get the indices you *don't* want to re-plot
    y(idx) = NaN;               % Set equal to NaN so they aren't plotted
    
    figure; hold on;
    plot(x, consumer(:,9));
    plot(x, y, 'r');            % Plot all points, NaNs wont show