在MATLAB中,设置柱状图条形的透明度和将y轴设置为对数刻度似乎都无法实现。

7
在MATLAB中,我想将条形图中的条形透明度设置为0.3,并将y轴设置为对数刻度 - 但两者似乎都不起作用...
subplot('Position',[0.15 0.7 0.45 0.15]);
data = [1 2 5 4 7 4 1];
B = bar(data,'g');
ch = get(B,'child');
set(ch,'facea',.3)

那很好,但是接着要添加这个:
set(gca,'YScale','log');

透明度设置无效。有什么想法吗?谢谢!

我几乎相信这是一个 bug。 - Trilarion
@Trilarion 这更像是一种限制而不是一个错误,请参见这里 - RTL
1个回答

6

在Matlab中,对数坐标轴和透明度无法同时使用。

为什么?

OpenGL渲染器(必须用于透明度)不支持对数坐标轴-根据2010b的文档,这一点已经被提到,并且在这里也有提及。

解决方案

通过转换数据和设置Y轴刻度来模拟对数坐标轴。

下面的代码绘制了带有对数坐标轴的条形图,获取所需属性,清除轴,然后使用信息来模拟对数坐标轴:
代码:

subplot('Position',[0.15 0.7 0.45 0.15]);
data = [1 2 5 4 7 4 1];
B = bar(data,'g');
set(gca,'Yscale','log')
ticks=get(gca,'Ytick');
ticklabel=str2num(get(gca,'YtickLabel'));
set(gca,'Yscale','linear')
cla

B = bar(log(data),'g');
set(gca,'Ytick',log(ticks));set(gca,'YtickLabel',10.^ticklabel)
ch = get(B,'child');
set(ch,'facea',.3)

唯一的损失就是刻度标签的格式。
最后,如果应用于负数据,我不能保证任何东西,尽管它几乎肯定会发出警告并且无法正常工作!

感谢@RTL!如果我有x数据和y数据怎么办?例如,B = bar(log(datax,datay),'g')不起作用...再次感谢! - user2861089
糟糕,我的错。这个可以:B = bar(x,(log(y)),'g')。再次感谢。 - user2861089

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接