在 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
的这个添加比我最初在上面所做的更不可读。如果这是对您正在开发的任何内容的要求,那么当然可以按照这种方式进行,但我真的认为没有必要。
我有一个包含数据和偏移量的序列。我被要求绘制数据的 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
的这个添加比我最初在上面所做的更不可读。如果这是对您正在开发的任何内容的要求,那么当然可以按照这种方式进行,但我真的认为没有必要。