在MatLab中水平移动stem()的起始点

时间:2015-01-29 20:24:19

标签: matlab plot

我有一个包含数据和偏移量的序列。我要求从偏移处开始绘制数据的干()图。我已经找到了数据部分(简单部分)以及如何更改窗口以包含偏移量,但是当我绘制图形时,它会显示偏移值为零和零,直到1,其中sequence.data将启动和积分。

methods
    function s = sequence(data, offset)
        s.data = data;
        s.offset = offset;
    end
function stem(x)
        % STEM Display a Matlab sequence, x, using a stem plot.
        stem(x.offset,x.data);
        axis([x.offset x.offset+length(x.data) 'auto' 'auto']);

    end

我需要弄清楚如何移动"我的x.data到我的x.offset并开始在那里绘制。

1 个答案:

答案 0 :(得分:1)

我不明白为什么在保持x数据相同的情况下,您无法添加y偏移量?

例如,在上面的评论中给出了您的示例:

x = 0:4;
y = 1:5;

这是原始图表的样子,以及将图表向左移动3(-3):

stem(x,y,'b');
hold on;
stem(x-3,y,'r');

这就是我得到的:

enter image description here

蓝色数据是原始数据,而红色数据是向左移动的实例3.正如您所看到的,y数据是相同的,但x点移动到3.您的代码实际上在做的是移位实际数据。您只是更改stem图表的显示范围。因此,你应该这样做:

methods
    function s = sequence(data, offset)
        s.data = data;
        s.offset = offset;
    end
    function stem(x)
        % STEM Display a Matlab sequence, x, using a stem plot.
        %// First define sequence from [0,N-1]
        vals = 0:numel(x.data)-1;
        %// Now use the above and manually shift the x coordinate
        stem(vals+x.offset,x.data);
    end

我将假设x轴上的数据从0开始计数,因此我们将声明从0到{{1}的序列其中N-1是您拥有的元素总数。一旦我们声明了这个序列,当它绘制N图时,我们只需在此序列中添加一个偏移量并将其用作stem数据。 x数据应保持不变。

但是,我认为创建一个用于实现y添加的自定义类的可读性低于我最初的做法。如果这是你要开发的任何要求,那么一定要继续这样做,但我并不认为这是必要的。