我正在尝试绘制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相同的长度)来更改每个标记的不透明度。
任何帮助将不胜感激!
答案 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, ...)
是的,它很慢。但是,如果您尝试识别一个图形对象中的单个点,那么它将变得很棘手。