我需要的是在对数刻度上显示 X 轴的直方图。但是,我仍然希望直方图中的每个条都具有相同的宽度。
不管怎样,我想出了(或基于)具有较高值的显示条作为较窄的显示条(它们在普通比例上具有相同的宽度,而不是在对数比例上)。
这是我现在正在做的事情:
edges = 10.^(c_min:0.1:c_max);
h = histc(data, edges);
bar(edges, h); set(gca, 'Xscale', 'log');
由于您的条应该均匀分布,您可以使用 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'))
使用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
)