gpt4 book ai didi

matlab - Matlab : constructing it and colouring it 中散点图的边界

转载 作者:行者123 更新时间:2023-12-01 13:19:13 26 4
gpt4 key购买 nike

我需要你的帮助在 Matlab 中绘制散点图的边界并用指定的颜色填充它。

首先让我向您展示一下散点图的样子。

scatter(x,y)

enter image description here

现在,让我向您展示我尝试设计的边框。

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

产生这个 enter image description here

这不是我想要的。首先,散点非常凸,我不明白为什么 boundary 会产生那种奇怪的形状。其次,我想在边框内涂上蓝色。

您能否就如何进行提出建议?此外,在构建边界时,我不希望依赖散点的凸性,因为在我的一些真实示例中,散点不是凸的。

最佳答案

边界

如果没有关于预期内容的任何信息,就没有简单的方法来获取非凸形状的边界。边界什么时候应该跟随凸包,什么时候应该偏离它?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 channel 设置了 80% 的透明度(0 是完全透明,1 是纯色)。

请注意,补丁对象类有很多选项,处理起来有点复杂,超出了像这样的基本用例。

关于matlab - Matlab : constructing it and colouring it 中散点图的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com