如何制作具有不同 x 轴的多个图形?
How to make multiple graphs with varying x-axis?
我需要在同一个 y 轴上绘制多个图形,但 x 轴对我来说有点棘手:
假设它从 0
到 a
,增加 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 测试)如下所示:
如果你只想要例如每个间隔的开始和结束,你必须进一步预处理xt
和xtl
。
希望对您有所帮助!
我需要在同一个 y 轴上绘制多个图形,但 x 轴对我来说有点棘手:
假设它从 0
到 a
,增加 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 测试)如下所示:
如果你只想要例如每个间隔的开始和结束,你必须进一步预处理xt
和xtl
。
希望对您有所帮助!