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

horizontally shift starting point for stem() in MatLab

我有一个包含数据和偏移量的序列。我被要求绘制数据的 stem() 图,从偏移量开始。我已经弄清楚了数据部分(简单的部分)以及如何更改 window 以包含偏移量,但是当我绘制图形时,它显示了值为零和零直到 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

我需要弄清楚如何 "move" 我的 x.data 到我的 x.offset 并在那里开始干图。

我不明白为什么您不能在保持 y 数据不变的同时添加 x 偏移量?

例如,以您在上面评论中的示例为例:

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

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

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

这是我得到的:

蓝色数据是原始数据,而红色是向左移动3的实例。可以看到,y数据是一样的,但是x点移动了向左移动 3。您的代码实际做的是 移动实际数据。您只是在更改 stem 图的 display 范围。因此,您真的应该这样做:

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 到 [=22] 的序列=] 其中 N 是您拥有的元素总数。一旦我们声明了这个序列,当需要绘制 stem 图时,我们只需向该序列添加一个偏移量并将其用作 x 数据。 y 数据应该保持不变。

但是,我认为创建一个自定义的 class 来实现对 stem 的这个添加比我最初在上面所做的更不可读。如果这是对您正在开发的任何内容的要求,那么当然可以按照这种方式进行,但我真的认为没有必要。