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的主要内容,如果未能解决你的问题,请参考以下文章

交换变量(不能使用第3个变量) - 品茗股份c++笔试题

如何连接 3 个 NSData 变量

如何创建具有 1 个自变量和 3 个因变量的计数和百分比表和折线图

为kmeans scikit堆叠3个变量

VueJS:绑定具有 3 个潜在值的变量?

os.path.join里写3个变量