Matlab中的散点图边界:构建和着色。

3
我希望你能帮助我在Matlab中绘制散点图的边框并填充指定颜色。
首先让我展示一下这个散点图的样子。
scatter(x,y)

enter image description here

现在,让我展示一下我尝试设计边框的成果。

k = boundary(x,y);
plot(x(k),y(k));

这将会生成此 输入图像描述

这不是我想要的。首先,散点很好地呈现了凸性,我不明白为什么 boundary 会生成那种奇怪的形状。其次,我想在边框内部着色为蓝色。

请问您如何操作?当构建边框时,我希望不依赖于散点的凸性,因为在我的某些实际示例中,散点是非凸的。

1个回答

0

边界

没有简单的方法可以在不知道预期结果的情况下获取非凸形状的边界。何时应该遵循凸包的边界,何时应该偏离凸包? Matlab函数boundary是通用的,可用于任意输入坐标。它具有“缩小因子”参数s,可以在0(凸包)和1(高度非凸)之间调节,具体取决于预期结果。

% Make some x,y data with a missing corner
[x,y]=meshgrid(1:20);
sel=~(x>15 & y<=5);
x=x(sel);y=y(sel);

% Compute boundary with several values for s
k=boundary([x,y]);            %Default shrink factor : 0.5
k_convhull=boundary([x,y],0);
k_closest=boundary([x,y],1);

% Plot the boundary:
plot(x,y,'ok') %black circles
hold on
plot(x(k),y(k),'-r') %red line
plot(x(k_convhull),y(k_convhull),'-g') %green line
plot(x(k_closest),y(k_closest),'-b') %blue line

即使将“收缩因子”设置为1,可重入角仍然有些被切割。如果这不适合您,您需要自己编写函数来计算边界的坐标。

绘制曲面

您需要使用一个补丁对象。

p=patch(x(k3),y(k3),[1 .8 .8]);
uistack(p,'bottom')

[1 .8 .8] 是补丁表面(浅粉色)的 RGB 颜色。 uistack 用于将补丁移动到其他图形对象下方,因为它不是透明的。如果有任何轴网格,它仍然会覆盖轴网格。另一个选项是:

p=patch(x(k3),y(k3),[1 0 0],'FaceAlpha',.2);

在这里,补丁将是纯红色的,并绘制在其他对象之上,但通过 alpha 通道设置了 80% 的透明度(0 表示完全透明,1 表示实心颜色)。

请注意,补丁对象类具有如此多的选项,以至于除了像这样的基本用例之外,它有点复杂难以处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接