【问题标题】:MATLAB - Increasing spacing between x-axis points (non-uniform plotting) other than logarithmicMATLAB - 增加 x 轴点之间的间距(非均匀绘图)而不是对数
【发布时间】:2016-02-26 07:23:03
【问题描述】:

我想增加 x 轴点之间的间距,例如在下图中,10 30 之间的距离增加,1150 和 1300 之间的距离减少。

【问题讨论】:

    标签: matlab plot matlab-figure


    【解决方案1】:

    回答新问题(扭曲 x 轴场以影响点):

    不幸的是,我的研究表明在 MATLAB 中没有内置的方法可以做到这一点。我看到其他人建议:

    1. 扭曲您自己数据中的字段,例如将 x 值从 10、30 和 50 更改为 100、300 和 500 以获得 10 倍放大率,然后将 500 添加到所有其他 x 值,因此它们向右移动;然后将标签(见下文)修改为“10”、“30”、“50”、“100”等。

    2. 使用直方图,其中您的 x 轴标签变为 bin,例如 10、30、50、100 等,并且您使用空 bin 来分隔点。

    回答老问题(影响 x 轴标签和刻度,而不是点):

    MathWorks docs看来,您可以任意设置刻度位置,无论是否统一:

    ax = gca;
    ax.XTick = [-3*pi -2*pi -pi 0 pi 2*pi 3*pi];
    ax.YTick = [-1 -0.5 0 0.5 1];
    
    % For R2014a and earlier:
    % ax = gca;
    % set(ax,'XTick',[-3*pi -2*pi -pi 0 pi 2*pi 3*pi])
    % set(ax,'YTick',[-1 -0.5 0 0.5 1])
    

    因此,编写一个函数来创建所需的间距并将其返回分配给XTick。在您的情况下,您似乎只需要检索要绘制的点的域值。

    【讨论】:

    • 谢谢,但我想我无法解释我的想法。例如,我想从附加的图像中,减少 1150 到 1300 之间的空间,增加 10 到 50 之间的空间。
    • 嗯。如果您想增加 x 轴 标签 之间的间距,那么我已经为您提供了解决方案。你只需要做ax.XTick = [100 200 300 400 500 700 850 1000 1150 1300]。如果您愿意,可以从您的点的域中推导出这些。相反,如果您的意思是您希望扭曲 x 轴 field 以便您的点位于不同的位置,那么我认为您需要在问题中这么说。是关于你的标签还是你的观点?
    • 我想改变点之间的空间。因此,例如,正如我从附加的图像中所说的那样,1150 和 1300 之间的空间减少,10 和 50 之间的空间增加。我也编辑我的问题。
    • @martin - 我已经编辑了你的问题和我的答案。不幸的是,似乎不存在完美的解决方案。