在条形图matlab中使Y轴呈指数缩放

Make the Y-axis scale exponentially in bar chart matlab

我正在尝试使用条形图绘制一些数据并且它工作正常,但问题是无法从图中识别出差异,如下所示,因此我需要将 y 轴刻度更改为指数级数据之间的差异可能会出现……有什么帮助吗??

这是我的代码:

    x = [0.1 1 10 100 1000 10000];
    y = [2.66    24.58    81.72    87.90    87.99    88.00];
    xplot = 1:numel(x); 
    figure;
    bar(xplot,y);
    set(gca,'XTick', xplot); 
    set(gca,'XTickLabel', x);
    ylim([0 100]);

如果您希望 y 轴看起来更均匀,请考虑将比例更改为 semi-logarithmic 图,或通过 log 转换您的 y 数据转型:

选项 #1 - 将 y 轴更改为 log 比例:

只需获取当前轴并将YScale设置为log:

x = [0.1 1 10 100 1000 10000];
y = [2.66    24.58    81.72    87.90    87.99    88.00];
xplot = 1:numel(x); 
figure;
bar(xplot,y);
set(gca,'XTick', xplot); 
set(gca,'XTickLabel', x);
set(gca,'YScale','log'); %// NEW
%ylim([0 100]); %// Remove as we don't need it

这是我得到的图表:

请注意,y 轴不会更改其数据 - 只会更改您呈现它的方式。报价以 semi-logarithmic 为基础,从底部开始,我们从 1、2、3 到 10 (10^1),接下来是 20、30、40,到 100 ( 10^2),然后是 200、300、400,直到 1000 (10^3) 等等。您当然可以在价格变动中看到一种模式,因为我们在 semi-logarithmic 的基础上增加。

选项 #2 - 将您的 y 数据转换为 log:

只需将您的 y 数据 运行 通过 log:

x = [0.1 1 10 100 1000 10000];
y = [2.66    24.58    81.72    87.90    87.99    88.00];
xplot = 1:numel(x); 
figure;
bar(xplot,log(y)); %// NEW
set(gca,'XTick', xplot); 
set(gca,'XTickLabel', x);
%ylim([0 100]); %// Remove as we don't need it

这是我们得到的:

请注意 y 轴已更改其单位。您可以留下免责声明,说明您的数据已 log 转换。