【问题标题】:Log scale (x axis) histogram对数刻度(x 轴)直方图
【发布时间】:2012-08-13 11:52:53
【问题描述】:

我需要的是在对数刻度上显示 X 轴的直方图。但是,我仍然希望直方图中的每个条都具有相同的宽度。

无论如何,我想出了(或基于)具有较高值的​​显示条作为较窄的显示条(它们在普通比例上具有相同的宽度,而不是在对数比例上)。

这是我现在正在做的事情:

edges = 10.^(c_min:0.1:c_max); 
h = histc(data, edges);
bar(edges, h); set(gca, 'Xscale', 'log');

【问题讨论】:

    标签: matlab plot histogram


    【解决方案1】:

    由于您的条形应该均匀分布,您可以使用 x 值 1,2,.. 绘制它们,然后更改轴标签。

    edges = 10.^(c_min:0.1:c_max); 
    h = histc(data, edges);
    
    centers = sqrt(edges(1:end-1).*edges(2:end));
    
    bar(h)
    
    %# fix the x-labels, x-axis extents
    xlim([0.5,length(centers)+0.5])
    set(gca,'xticklabel',num2str(centers(:),'%5.2f'))
    

    【讨论】:

    • 好又简单的方法,您是否知道是否有一种方法可以很好地打印 10^12 等数字?
    • @gintas:请参阅this question 了解如何绘制格式良好的刻度标签。
    • 谢谢!这正是我所需要的!
    • 你在缩放/平移时会遇到问题,否则,这没关系
    • @RodyOldenhuis:你是对的。但是,对于条形图,至少我通常不会缩放和平移。
    【解决方案2】:

    使用patch 代替bar

    figure, hold on
    edges = 10.^(c_min:0.1:c_max);
    h = histc(data, edges);
    
    for ii = 1:numel(edges)-1    
        patch(...
            [edges(ii) edges(ii) edges(ii+1) edges(ii+1)], ...
            [0 h(ii) h(ii) 0],...
            'b');
    end
    

    虽然这个特定的代码没有做你想要的,这是edges的定义而不是方法的问题,所以你不得不对edges进行一些调整(也许重新定义它们对于patch)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2016-11-05
      相关资源
      最近更新 更多