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"是绘制每个圆圈的特定大小
此致!
我正在研究判别分析,想使用 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"是绘制每个圆圈的特定大小
此致!