3 个变量的 Gscatter
Posted
技术标签:
【中文标题】3 个变量的 Gscatter【英文标题】:Gscatter for 3 variables 【发布时间】:2015-02-28 13:34:02 【问题描述】:我正在从事判别分析,并希望使用 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) 并继续。请帮助我。谢谢你
【问题讨论】:
【参考方案1】:gscatter
无法做到这一点,因为它只绘制 2D 数据。如果您想为 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
,以便我们可以更好地查看图表。
这是我们得到的:
【讨论】:
【参考方案2】:Scatter 命令是得到你想要的最简单的方法
scatter3(meas(:,1),meas(:,1),meas(:,1),size,categorical(species))
“大小”是用特定大小绘制每个圆圈
问候!
【讨论】:
以上是关于3 个变量的 Gscatter的主要内容,如果未能解决你的问题,请参考以下文章