如何在Matlab中绘制具有不同高度和不同宽度的条形,y轴为对数刻度

时间:2014-02-04 17:28:07

标签: matlab matlab-figure

如果我在Matlab中使用以下文件,我怎样才能使y轴成为对数刻度?我尝试了不同的方法,但它没有用。

x = [0.5 0.6 0.9 1 1.2]; % start of bar
    y = zeros(length(x),1);
    dx = diff([x 1.8]); % width of bar
    dy = [1 3 2 .5 .1];
    figure, hold on
    for ii=1:length(x)
        rectangle('position',[x(ii) y(ii) dx(ii) dy(ii)])
    end
    axis([0.5 2 0 4.1])
    ylabel('Prob density')
    xlabel('Time')

2 个答案:

答案 0 :(得分:0)

使用半语功能。请参阅此处的文档:http://www.mathworks.com/help/matlab/ref/semilogy.html

答案 1 :(得分:0)

一种方法是在创建图形后或在完成绘图后更改'YScale'属性,例如:

...
set(gca,'YScale','log');

这也会改变你的y轴标签,使这个特殊的情节看起来很奇怪。您可以通过在调用rectangle

的y位置应用指数来解决此问题
...
rectangle('position',[x(ii) exp(y(ii)) dx(ii) dy(ii)]);

当然,在for循环之外执行此操作会更有效。尝试使用bar也可能更好。

请注意,这样的情节永远不会完全合理,因为您的条形图从零开始(y)而log10(0)-Inf。因此,对数刻度图从10^0 = exp(0) = 1开始。