如何制作具有不同 x 轴的多个图形?

How to make multiple graphs with varying x-axis?

我需要在同一个 y 轴上绘制多个图形,但 x 轴对我来说有点棘手:

假设它从 0a,增加 1,它总共需要 a-1 个不同的间隔。

它们中的每一个都应该在 a 结束,但它也必须有不同的初始化点。只有第一个从 0 开始,而每个下一个都从前一个加一开始,如下图所示。两条虚线,我曾经尽可能清楚地想象我的想法,是没有必要的。

如有任何帮助,我将不胜感激!

将您的原始间隔复制 0 ... a a 次(根据我的理解,您将有 a 个间隔,而不是 a-1),这样您就可以得到一个矩阵X 大小 [a x a+1]。将 X 的左下三角设置为 NaN,这样行现在代表您的(缩短的)间隔。在 X 上进行计算。注意,这些必须 support/neglect NaN 正确的值。

之后,您需要适当调整X中的值,以便随后绘制间隔。基本上,我们为每一行添加一些固定值。

最后,我们需要适当的 xticks and xticklabels。因此,我们从 X 和修改后的 X 中提取所有值,并去掉 NaN 值。

这是一个完整的代码片段:

% 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);

输出(Octave 5.1.0,也使用 MATLAB Online 测试)如下所示:

如果你只想要例如每个间隔的开始和结束,你必须进一步预处理xtxtl

希望对您有所帮助!