Matlab中散点图的边框:对其进行构造并为其着色

时间:2018-11-05 20:08:04

标签: matlab plot

我希望您能在Matlab中绘制散点图的边界并用指定的颜色填充。

首先让我告诉您分散的外观。

scatter(x,y)

enter image description here

现在,让我告诉您我尝试设计边框的内容。

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

产生此enter image description here

这不是我想要的。首先,散点很好地凸出,我不明白为什么boundary会产生这种怪异的形状。其次,我想在边框内用蓝色着色。

请问您如何进行操作?另外,在构建边界时,我宁愿不要依赖散点图的凸度,因为在我的一些实际示例中,散点图不是凸点。

1 个答案:

答案 0 :(得分: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为纯色)。

当心,修补程序对象类具有太多选项,这些选项很难处理,超出了像这样的基本用例。