MATLAB R2018b基于变量的半透明散点图

时间:2019-07-27 18:58:09

标签: matlab plot graph matlab-figure

我正在尝试绘制3D散点图(scatter3)。该图具有多个散点图3(要绘制多个组)。我想通过离散变量来改变每个散布中的标记不透明度。怎么办?

我尝试使用绘制每个散点的迭代方法,但是这破坏了图形绘制浏览器(我希望能够使用它)。另外,这是一种缓慢的方法。我也尝试过[UndocumentedMatlab的Alpha教程](http://undocumentedmatlab.com/blog/plot-markers-transparency-and-color-gradient),但是由于某些原因,这不会在我的系统上创建透明点(MATLAB 2018b)。

这是我尝试过的代码:

%// example data
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);

%// plot scatter, get handle
h = scatter(x,y); 
drawnow; %// important

%// get marker handle
hMarkers = h.MarkerHandle; 

%// get current edge and face color
edgeColor = hMarkers.EdgeColorData;
faceColor = hMarkers.FaceColorData;

%// set face color to the same as edge color
faceColor = edgeColor;

%// opacity
opa = 0.3;

%// set marker edge and face color
hMarkers.EdgeColorData = uint8( [edgeColor(1:3); 255*opa] ); 
hMarkers.FaceColorData = uint8( [faceColor(1:3); 255*opa] ); 

这不会在点上产生不同的不透明度。

我想通过一个单独的变量(与XYZ相同的长度)来更改每个标记的不透明度。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

那是因为您要更改颜色而不是不透明度。要改变散点图的不透明度,最简单的方法是使用Matlab文档中所述的“名称,值”对。我想让您知道的第一件事是,您可以使用doc function_name或本例中的doc scatter3找到有关Matlab函数的任何知识。

现在说您有一些点存储在变量中,并且您想设置这些点的不透明度。首先要注意的是,散点图具有两个不透明度参数。第一个不透明度参数会更改标记边缘的不透明度,而第二个会更改标记面的不透明度。现在,如果您的标记没有填充,则面部不透明度将不起作用。现在说您的标记已填充,并且您想要将面部和边缘的不透明度都设置为最大值的一半,然后您将使用:

scatter3(x_data, y_data, z_data, 'MarkerEdgeAlpha', 0.5, 'MarkerFaceAlpha', 0.5);

现在,您可以自然地将0.5与0到1之间的任何数值交换以获取所需的结果。

答案 1 :(得分:0)

如果您要自定义每个点的样式,建议您一张一张地绘制它们。

例如

fig_obj = {};
fig_obj = [fig_obj; scatter(x(1),y(1))];

set(fig_obj, ...)

是的,它很慢。但是,如果您尝试识别一个图形对象中的单个点,那么它将变得很棘手。