对数刻度(x轴)直方图

时间:2012-08-13 11:52:53

标签: matlab plot histogram

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

无论如何,我想出了更高价值的显示条(或更高)(在普通尺度上它们具有相同的宽度而不是对数刻度)。

以下是我现在正在做的事情:

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

2 个答案:

答案 0 :(得分:2)

由于您的条形应均匀分布,您可以使用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'))

答案 1 :(得分:1)

使用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)重新定义它们