我对如何为以下示例绘制条形图感到有点困惑:
x_lims = [1000,10000;10000,100000;100000,1000000;1000000,10000000;10000000,...
100000000;100000000,1000000000;1000000000,10000000000;...
10000000000,100000000000;100000000000,1e12];
ex1 = [277422033.049038;24118536.4203188;2096819.03295482;...
182293.402068030;15905;1330;105;16;1];
这里,x_lims 是每个单独柱的 x 轴限制,ex1 是计数。我如何在条形图上绘制这些,以便每个单独的条形沿 x 轴的宽度由 x_lims(:,1) 和 x_lims(:,2) 之间的距离定义,而 y 值由 ex1 定义?
到目前为止我有:
bar(log10(x_lims(:,1)),log10(ex1));
set(gca,'Xtick',3:11,'YTick',0:9);
set(gca,'Xticklabel',10.^get(gca,'Xtick'),...
'Yticklabel',10.^get(gca,'Ytick'));
但我想 (1) 让标签与使用 semilogx 或 semilogy 创建的标签相同,例如10^9,和 (2) 我想删除条之间的空间,例如,对于第一个条,我想让它从 1000 水平延伸到 10000,然后第二个条从 10000 水平延伸到 100000,并且很快。如何才能做到这一点?
刚刚意识到我可以使用
'BarWidth', 1
定义条的宽度。
那么,如何将标签更改为 10^,并使条形图延伸到 x_lims 中的 valkues 而不是刻度的中间(如果这有意义的话)
最佳答案
怎么样
labels = arrayfun(@(x)(['10^', num2str(x)]), get(gca,'Xtick'), 'UniformOutput', false)
set(gca,'Xticklabel',labels,...
'Yticklabel',10.^get(gca,'Ytick'));
关于matlab - 将条形图的刻度标签更改为对数刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201874/