据我所知,这是部分正确的行为。当您输入虚数时,实部和虚部被视为 x 和 y 值对(即 in xychk.m
, x = real(y); y = imag(y);
)。所以这就解释了为什么虚部在 y 轴上。
但是,当您使用第二个参数输入 x 轴值时,它会从第一个输入参数获取 x 轴值并将 的实部y
视为 y 轴数据。具体来说,当stem(1:length(x),x)
被调用时,stem.m
会创建一个为 提供的specgraph.stemseries
具有复杂值的YData
。但是,似乎YData
无法保存复杂的数据并保留了实部。这感觉像是一个错误,但如果plot
文档适用于stem
.
正如MathWorks关于plot
命令所述(显然适用于stem
):
当 plot 的参数是复数时(即虚部不为零),所有 MATLAB® 图形函数都会忽略虚部,除非 plot 被赋予单个复数数据参数。对于这种特殊情况,该命令会生成实部与虚部的关系图。所以,
plot(Z)
其中 Z 是复数向量或矩阵,等价于
plot(real(Z),imag(Z))
David 和 Daniel R.似乎确实存在并指出了一个错误,stem
其中stairs
正确XData
的不是使用第一个(单参数)语法设置的。错误的来源stem.m
似乎在这里:
if hasXData
xdata = {'XData', datachk(x(:,k))};
end
问题是hasXData
上面设置的hasXData = nargs ~= 1;
。我认为这应该是这样的:
hasXData = nargs ~= 1 || ~isreal(args{1});