我试图在Matlab中的散点图中设置(MarkerFace)数据点的透明度。我之前可以看到这个问题,大多数答案建议使用patch
。这对我不起作用,有人能告诉我哪里出错了吗?谢谢!
h(1) = scatter(x1,y1,30,'MarkerEdgeColor',[0 0.5 0.5],'MarkerFaceColor', [0 0.5 0.5]);
hold on
h(2) = scatter(x2,y2,30,'MarkerEdgeColor','g','MarkerFaceColor', 'g');
h(3) = scatter(x3,y3,30,'MarkerEdgeColor',[0 0.3906 0],'MarkerFaceColor', [0 0.3906 0]);
h(4) = scatter(x4,y4,30,'MarkerEdgeColor',[0.4961 1.0000 0.8281],'MarkerFaceColor', [0.4961 1.0000 0.8281]);
PatchInPlot = findobj(h([1 2 3 4]), 'type', 'patch');
set(PatchInPlot, 'facea', 0.5)
答案 0 :(得分:1)
FaceAlpha
属性并不真正引用标记。它指的是标记跨越的区域,尝试
h = scatter(1:5,1:5,30,'MarkerEdgeColor',[0.4961 1.0000 0.8281],'MarkerFaceColor', [0.4961 1.0000 0.8281]);
PatchInPlot = findobj(h, 'type', 'patch');
set(PatchInPlot(2),'XData',[3.5;4.5;4.5;3.5;3.5],'YData',[3.5;3.5;4.5;4.5;3.5]);
set(PatchInPlot(2),'FaceColor',[1,0,0]);
set(PatchInPlot, 'facea', 0.2);
如果要绘制合理数量的点,可以考虑为每个标记创建一个贴片多边形,然后为每个多边形设置透明度。这可能不是唯一的方法,但我无法给出更好的答案。