我需要在同一个y轴上绘制多个图形,但是x轴对我来说有点棘手:
假设它从0
变为a
,并增加1,则需要总体上具有a-1
个不同的间隔。
其中每个都应在a
处结束,但还必须具有不同的初始化点。如下图所示,只有第一个以0
开头,而每个下一个以开头。我用来使我的思想尽可能清晰地形象化的两条虚线不是必需的。
我将不胜感激!
0 ... a
复制您的原始间隔a
a
次(据我了解,您将有a-1
个间隔,而不是X
),这样您将得到大小为[a x a+1]
的矩阵X
。将NaN
的左下三角形设置为X
,以便现在各行表示您的(缩短)间隔。在NaN
上进行计算。请注意,这些必须正确地支持/忽略X
值。
之后,您需要适当地调整xticks
中的值,以便随后绘制间隔。基本上,我们为每行添加一些固定值。
最后,我们需要适当的xticks
和xticklabels
。因此,我们从xticklabels
和修改后的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 = mat2cell(X.', a+1, ones(a, 1));
xtl = cellfun(@(x) x(~isnan(x)), xtl, 'UniformOutput', false);
xtl = vertcat(xtl{:});
% Plot
plot(X_plot.', Y.');
xticks(xt);
xticklabels(xtl);
[例如,如果仅需要每个间隔的开始和结束,则必须进一步预处理和xt
。
希望有帮助!