我需要在同一y轴上绘制多个图形,但是x轴对我来说有点棘手:
假设它从0
到a
,增加1,则需要有总共a-1
个不同的间隔。
其中每一个都应在a
处完成,但是它也必须具有不同的初始化点。如下图所示,只有第一个从0
开始,而每个下一个从前一个加一个开始。我用来使我的思想尽可能清晰地形象化的两条虚线不是必需的。
我将不胜感激!
答案 0 :(得分:1)
复制原始间隔0 ... a
a
次(据我了解,您将有a
个间隔,而不是a-1
),这样就得到了一个矩阵{{ 1}},大小为X
。将[a x a+1]
的左下三角设置为X
,这样行现在代表您的(缩短)间隔。在NaN
上进行计算。请注意,这些必须正确支持/忽略X
值。
在那之后,您需要适当地调整NaN
中的值,以便随后绘制间隔。基本上,我们为每行添加一些固定值。
最后,我们需要适当的buffer
和xticks
。因此,我们从X
和修改后的X
中提取所有值,并摆脱了X
值。
这是完整的代码段:
NaN
输出(Octave 5.1.0,也已通过MATLAB Online测试)如下:
例如,如果仅需要每个间隔的开始和结束,则必须进一步预处理% Parameter
a = 7;
% Initialize intervals
X = repmat(0:a, a, 1);
X = X .* (ones(size(X)) + tril(nan(size(X)), -1));
% Calculation on these intervals; attention: there are NaN in X
Y = sin(X / a * 2 * pi);
% Modify X for plotting
X_plot = X;
X_plot(2:end, :) = X_plot(2:end, :) + cumsum(a:-1:2).';
% Get xticks
xt = X_plot.';
xt = xt(:);
xt(isnan(xt)) = [];
% Get xticklabels
xtl = X.';
xtl = xtl(:);
xtl(isnan(xtl)) = [];
% Plot
plot(X_plot.', Y.');
xticks(xt);
xticklabels(xtl);
和xt
。
希望有帮助!