在matlab中绘制多个图

时间:2016-09-01 08:57:38

标签: matlab plot legend

我正在尝试绘制一个已在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的信号。我需要只绘制一次原始信号,并将滤波后的信号多次绘制。如何在不弄乱信号的图例和颜色的情况下做到这一点。

1 个答案:

答案 0 :(得分:0)

因此,如果我正确地阅读了您的问题,那么您有一堆原始信号段,并且对于其中每一个,您都希望应用一组不同的过滤器。通过这样做,您希望图例类似于

  • 原始信号
  • 过滤器1
  • FILTER2
  • ...

图例的问题在于默认情况下的顺序与绘图顺序相同,而且您还会绘制相同信号的不同部分,它会添加到混乱中。

围绕这个

有不同的方法
  1. 预先创建并存储所有信号(在单独的for循环中)。然后按照您想要的顺序绘制它们,并且图例将自行解决。

  2. 在设置图例之前,使用uistack存储图表句柄并按照您喜欢的顺序排列

  3. 第一个选择是更清洁。但是,如果您选择第二个选项,则应该分割原始信号和滤波信号的绘图

    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)