设置图例的Alpha值(透明度)以匹配MatLab中的绘图中的alpha

时间:2014-05-16 05:29:24

标签: matlab

我之前看过这个问题,但似乎没有解决方案,所以我只是想知道它是否完全可能。

我在MatLab中有一个条形图并设置了透明度:

B = bar(x,y,'stacked');
set(B(1),'facecolor',[0 0.3906 0]) 
set(B(2),'facecolor',[0.5625 0.9297 0.5625])
ch1 = get(B(1),'child');
set(ch1,'facea',.5)
ch2 = get(B(2),'child');
set(ch2,'facea',.5)

我希望情节中的透明度能够反映在传奇中:

BL = legend ((B([1 2])),{'data1','data2'},'fontsize',10);

但是,图例中的alpha值似乎为1.

有什么想法吗?感谢。

4 个答案:

答案 0 :(得分:11)

请注意,2014b更新需要稍作修改。有关补丁等的信息似乎现在保存在图例命令的“图标”输出中,因此您需要;

[BL,BLicons] = legend ((B([1 2])),{'data1','data2'},'fontsize',10);

然后

PatchInLegend = findobj(BLicons, 'type', 'patch');
set(PatchInLegend, 'facea', 0.5)

现在就可以了。花了一个小时搞清楚这一点,以为我会传递它:)

答案 1 :(得分:5)

您可以使用PatchInLegend = findobj(BL, 'type', 'patch');查找图例中的修补程序对象。然后,您可以使用set(PatchInLegend, 'facea', 0.5)设置透明度以设置透明度。

透明之前

enter image description here

透明后

enter image description here

因此颜色会发生变化,而且确实看起来好多了。

答案 2 :(得分:2)

我知道这不是代码高尔夫,问题有点陈旧,但我确实有一种方法可以用更少的行(找到here)来直接修改{{1不必像在当前接受的两个答案中那样搜索属性。

BoxFace

其中lgnd = legend(legendTextCells); set(lgnd.BoxFace, 'ColorType', 'truecoloralpha', 'ColorData', uint8([255;255;255;0.5*255])); 是图例文本的单元格数组,可以通过修改legendTextCells中的小数系数来设置alpha值。

答案 3 :(得分:0)

显然,在2018b版本legend中会自动处理透明性问题。这意味着您无需执行任何其他操作即可获得图例的透明度以匹配图中的透明度。