在MATLAB中调整条形图上的x轴刻度

时间:2014-09-16 05:08:52

标签: matlab

我正在尝试调整x轴的比例以使值更接近,但我无法这样做。

我需要输出像这张照片:

enter image description here

然而,我实际得到的是下面的照片:

enter image description here

以下是我为重现此错误而编写的代码:

    x = [0.1 1 10 100 1000 10000];
    y = [1.9904   19.8120   82.6122   93.0256   98.4086   99.4016];
    figure;
    bar(x,y);
    ylabel('Y values');
    xlabel('X values');
    set(gca,'XTick', [0.1 1 10 100 1000 10000])

如何调整x轴以使其看起来像第一张照片?

1 个答案:

答案 0 :(得分:4)

因为您的数据具有如此巨大的动态范围,并且由于x轴的线性行为,您的图形自然会出现这样的情况。我建议的一个折衷方案是,您转换x数据,以便将其映射到较小的比例,然后重新映射您的x数据,使其落在一个小的指数规模。之后,只需使用此重新映射的比例绘制数据,然后重命名x刻度,使它们具有与x数据相同的值。为此,我先取log10个数据,然后对这些数据应用指数。通过这种方式,您可以将x坐标缩放到较小的动态范围。当您将指数应用于此较小范围时,x坐标将逐渐展开,x的值越高,值x的值越大越好x = [0.1 1 10 100 1000 10000]; %// Define data y = [1.9904 19.8120 82.6122 93.0256 98.4086 99.4016]; xplot = (1.25).^(log10(x)); %// Define modified x values figure; bar(xplot,y); %// Plot the bar graph on the modified scale set(gca,'XTick', xplot); %// Define ticks only where the bars are located set(gca,'XTickLabel', x); %// Rename these ticks to our actual x data -axis,但不会像你在原始情节中看到的那样遥远。

因此,尝试这样的事情:

x

这就是我得到的:

enter image description here

请注意,您必须使用指数的基数,即我所做的1.25,以适应您的数据。显然,x数据的动态范围越大,越小此指数就必须使数据彼此更接近。


根据您的评论进行编辑

根据您的评论,您希望条形在相邻条形之间是等距的。因此,您只需将x轴线性调整为小范围,从...说... 1到x值的总数。然后,我们应用相同的逻辑来重新命名x轴上的刻度,以便它们来自真正的xplot值。因此,您只需要更改一行,即x = [0.1 1 10 100 1000 10000]; %// Define data y = [1.9904 19.8120 82.6122 93.0256 98.4086 99.4016]; xplot = 1:numel(x); %// Define modified x values figure; bar(xplot,y); %// Plot the bar graph on the modified scale set(gca,'XTick', xplot); %// Define ticks only where the bars are located set(gca,'XTickLabel', x); %// Rename these ticks to our actual x data 。其他行应该保持不变。因此:

{{1}}

这就是我得到的:

enter image description here