matlab - 将条形图的刻度标签更改为对数刻度

标签 matlab

我对如何为以下示例绘制条形图感到有点困惑:

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'));

enter image description here

但我想 (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/

相关文章:

image - 基于 Gabor 的纹理分割

matlab - Matlab 内存映射中的高效字节模式搜索

matlab - 如何在 Matlab 中创建非线性间隔向量?

algorithm - 遗传算法与matlab如何使用分类精度作为适应度函数

matlab - 有没有办法在matlab中定义通用函数?

Matlab 未绘制精确的傅里叶信号

arrays - 如何在 MATLAB 中基于索引向量添加矩阵的行?

arrays - 在 Matlab 中结合 cellfun 和 subs

matlab - 如何在 MATLAB 中使用 FFT 和 findpeaks() 从 .WAV 文件重新创建乐器声音?

matlab精度行列式问题