3 个变量的 Gscatter

Gscatter for 3 variables

我正在研究判别分析,想使用 MATLAB 对一些数据进行分类。在 MATLAB 中给出的 Fisher 鸢尾花数据示例中(有关详细信息,请访问 www.mathworks.com/products/demos/statistics/classdemo.html),他们仅考虑前 2 个变量(萼片长度和宽度)。我想继续使用更多特征进行分类,例如花瓣长度和花瓣宽度。

此外,MATLAB 函数 gscatter 似乎只需要 2 个变量。

gscatter(meas(:,1), meas(:,2), species,'rgb','osd');

我也想包括 meas(:,3) 并继续。请帮助我。谢谢

你不能用 gscatter 做到这一点,因为它只绘制二维数据。如果您想对 3D 数据执行此操作(因为您包括另一个维度),请考虑使用 plot3 以 3D 形式绘制数据。但是,gscatter 允许您指定每个组的颜色以及每个点的标记。我们仍然可以对 plot3 做同样的事情,但它需要更多的工作。产生一个新的空白 figure,使用 hold on,然后使用循环绘制属于特定类别的所有数据,一次使用不同的颜色和标记。

我们首先要做的是把species中的分类数据,给每个类别分配一个唯一的ID,这样我们就可以分离出正确的数据进行绘图。因此,尝试这样做:

load fisheriris; %// The data that you are referring to
[~,~,id] = unique(species);
colors = 'rgb';
markers = 'osd';

for idx = 1 : 3
    data = meas(id == idx,:);
    plot3(data(:,1), data(:,2), data(:,3), [colors(idx) markers(idx)]);
    hold on;
end
grid; %// Show a grid

让我们慢慢看代码。 load fisheriris 像您提到的那样加载 Fisher Iris 数据。下一行使用 unique 遍历 species 数组并为每个字符串分配一个唯一的 ID。我们需要这个数组来为每个类别分离出存储在 meas 中的数据,这样我们就可以用不同的颜色和标记在我们的图表上绘制这些数据。我声明了两个字符串数组,它们将存储每个标记的颜色以及标记。现在,我们创建一个循环,将分离出每个唯一标签的数据,使用 plot3 绘制此数据,然后用相应的颜色和标记标记每个点。您需要使用 hold on 以便我们可以在同一张图中绘制多组点。不这样做将在您每次调用 plot3 时清除图形,并仅绘制最近添加的点。作为奖励,我们添加了一个 grid 以便我们可以更好地查看图表。


这是我们得到的:

分散命令是获得所需内容的最简单方法

scatter3(meas(:,1),meas(:,1),meas(:,1),size,categorical(species))

"size"是绘制每个圆圈的特定大小

此致!