我正致力于判别分析,并希望使用MATLAB对一些数据进行分类。在MATLAB中给出的Fisher's Iris Data的例子中(详见访问www.mathworks.com/products/demos/statistics/classdemo.html),他们只考虑前2个变量(Sepal Length& Width)。我想继续进行具有更多功能的分类,如花瓣长度和花瓣宽度。
此外,MATLAB函数gscatter似乎只需要2个变量。
gscatter(meas(:,1), meas(:,2), species,'rgb','osd');
我想包括meas(:,3)并继续。请帮助我。谢谢
答案 0 :(得分:5)
您无法使用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
,以便我们更好地查看图表。
这就是我们得到的:
答案 1 :(得分:0)
Scatter命令是获得所需内容的最简单方法
scatter3(meas(:,1),meas(:,1),meas(:,1),size,categorical(species))
“尺寸”是绘制具有特定尺寸的每个圆
致谢!