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

问题描述 投票:-1回答:1

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

假设它从0变为a,并增加1,则需要总体上具有a-1个不同的间隔。

其中每个都应在a处结束,但还必须具有不同的初始化点。如下图所示,只有第一个以0开头,而每个下一个以enter image description here开头。我用来使我的思想尽可能清晰地形象化的两条虚线不是必需的。

我将不胜感激!

0 ... a

matlab matlab-figure
1个回答
1
投票

复制您的原始间隔a a次(据我了解,您将有a-1个间隔,而不是X),这样您将得到大小为[a x a+1]的矩阵X。将NaN的左下三角形设置为X,以便现在各行表示您的(缩短)间隔。在NaN上进行计算。请注意,这些必须正确地支持/忽略X值。

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

最后,我们需要适当的xticksxticklabels。因此,我们从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);

[例如,如果仅需要每个间隔的开始和结束,则必须进一步预处理Outputxt

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.