我希望通过MATLAB中的绘图突出显示/标记数组的某些部分。经过一些研究(like here)后,我试图抓住第一个情节,找到突出显示的指数,然后找到一个新情节,只有这些点。但是,这些点正在绘制,但都转移到轴的开头:
我目前正在尝试使用此代码:
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
我想做的另一件事是突出显示图表的整个部分,就像同一部分的“补丁”一样。有什么想法吗?
答案 0 :(得分:2)
问题是您只是将y轴数据提供给绘图功能。默认情况下,这意味着所有数据都会绘制在绘图的1:numel(y)
x位置,其中y
是您的y轴数据。
你有两个选择......
还提供x轴数据。你已经得到了数组x
了!
figure; hold on;
plot(x, consumer(:,9));
plot(x(idx), consumer(idx,9), 'r.');
除此之外:我有点困惑为什么要创建idx
。如果errors
与您描述的一样(数组的索引),那么您应该只能使用consumer(errors,9)
。
使您不希望显示的所有数据等于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