我正在尝试绘制一个已在1个绘图中使用不同滤镜过滤的信号。唯一的问题是我必须绘制一次原始信号和不同的滤波信号。处理颜色和传说变得一团糟。
label{1} = 'raw_Signal'
for i = 1:NumOfFilter
f = FilterClass();
f.fc = x; % fc changes for each filter
for j = 1: length(Signal) % every signal will have multiple segments
filtered_signal = f.eval(signal(j).seg)
plot(handles.axes2, signal(j).time,signal(j).seg,signal(j).time,filtered_signal)
hold(handles.axes2,'on')
end
label{i+1} = 'filter_1'
end
因此signal(j).seg
是我的原始信号的一部分,filtered_signal
过滤了signal(j).seg
的信号。我需要只绘制一次原始信号,并将滤波后的信号多次绘制。如何在不弄乱信号的图例和颜色的情况下做到这一点。
答案 0 :(得分:0)
因此,如果我正确地阅读了您的问题,那么您有一堆原始信号段,并且对于其中每一个,您都希望应用一组不同的过滤器。通过这样做,您希望图例类似于
图例的问题在于默认情况下的顺序与绘图顺序相同,而且您还会绘制相同信号的不同部分,它会添加到混乱中。
围绕这个
有不同的方法预先创建并存储所有信号(在单独的for循环中)。然后按照您想要的顺序绘制它们,并且图例将自行解决。
在设置图例之前,使用uistack
存储图表句柄并按照您喜欢的顺序排列
第一个选择是更清洁。但是,如果您选择第二个选项,则应该分割原始信号和滤波信号的绘图
rawH = plot(handles.axes2, signal(j).time,signal(j).seg)
filtH(i) = plot(handles.axes2,signal(j).time,filtered_signal, 'Color', FiltColor{i})
这里我只保存最后一个手柄,但我认为这符合你的目的。
您需要在此之前设置hold on
,或告诉轴添加绘图
set(handles.axes2, 'NextPlot', 'add')
然后只需将过滤后的信号手柄移动到原始手柄的顶部和上方。然后绘制图例
uistack(filtH, 'top')
uistack(rawH, 'top')
legend(label)