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



我正在尝试制作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 的长度相同)来改变每个标记的不透明度。

任何帮助将不胜感激!

那是因为您正在改变颜色而不是不透明度。要改变散点图的不透明度,最简单的方法是使用 Matlab 文档中描述的"名称,值"对。我想让你知道的第一件事是,你需要知道的关于 Matlab 函数的任何信息都可以通过使用doc function_name或在本例中doc scatter3找到。

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

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

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

如果你想自定义每个点的样式,我建议你一个接一个地绘制它们。

例如

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

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

最新更新