首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab中散点图的边界:构造和着色

Matlab中散点图的边界:构造和着色
EN

Stack Overflow用户
提问于 2018-11-06 04:08:04
回答 1查看 126关注 0票数 3

我希望你在Matlab中绘制散点的边界,并用指定的颜色填充它。

让我首先向你展示散布是什么样子的。

代码语言:javascript
运行
复制
scatter(x,y)

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

代码语言:javascript
运行
复制
k = boundary(x,y);
plot(x(k),y(k));

它会产生这样的结果

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

你能告诉我该怎么做吗?此外,在构建边界时,我不希望依赖于散布的凸性,因为在我的一些真实示例中,散布不是凸的。

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 21:20:49

边界

在没有任何关于期望的信息的情况下,没有简单的方法来获得非凸形的边界。什么时候边界应该跟随凸包,什么时候应该偏离它?Matlab函数boundary是通用的,可以处理任意输入坐标。它有一个‘收缩因子’参数s,可以在0(凸包)和1(高度非凸包)之间调整,这取决于预期的结果。

代码语言:javascript
运行
复制
% 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,可重入的边角仍然有些缩小。如果这不适合您,您将需要创建自己的函数来计算边界的坐标。

绘制曲面

你需要在那里使用一个面片对象。

代码语言:javascript
运行
复制
p=patch(x(k3),y(k3),[1 .8 .8]);
uistack(p,'bottom')

[1 .8 .8]是面片曲面的RGB颜色(浅粉色) uistack用于将面片移动到其他图形对象下方,因为它不是透明的。它仍将覆盖轴栅格(如果有的话)。另一种选择是:

代码语言:javascript
运行
复制
p=patch(x(k3),y(k3),[1 0 0],'FaceAlpha',.2);

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

请注意,patch对象类有如此多的选项,除了像这样的基本用例之外,处理起来有些复杂。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53161452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档