聚类(x,y)坐标在Matlab中,椭圆围绕不同的密度

时间:2014-02-02 18:31:12

标签: matlab plot cluster-analysis

我在CSV文件中保存了一些数据点。奇数列表示X值,偶数列表示Y值。大约有30列和800行。我想在Matlab中导入这些数据点,以便将可视化作为下面附带的图像(第一个)。我可以选择单色。如图所示,我的观点完全相似。我希望在闭合点周围有椭圆,并为每组点绘制至少两个椭圆,以显示不同的密度。

请帮忙!如果我的问题不明确,只看图像,我想要这样的东西,但我可以使用单色。所有点都来自单个CSV文件。

编辑:我正在使用csvread从CSV文件中获取积分。要逐列阅读,我使用以下代码。但我认为有更有效的方法来做到这一点。正如我所说,我有30列和大约800行。

b = csvread ('C:\Users\Riyadh\Desktop\ThumbTouch All\HeatMaps\Tap 3 Rig R.csv', 1, 0, [1 0 870-1 0 ] )

第二张图片显示了我目前所拥有的内容。

What I want

What I have

2 个答案:

答案 0 :(得分:2)

图片显然来自维基百科: https://en.wikipedia.org/wiki/File:EM-Gaussian-data.svg

此页面还说该图像是用ELKI生成的;那么为什么不尝试使用ELKI而不是Matlab?

要使此可视化有意义,您需要使用EM群集。我很确定它已经存在于Matlab中,它实际上可能带有类似的可视化,这被称为等高线图

但是,您的数据可能太小。

您有30个维度,对于协方差矩阵在统计上是合理的,根据经验,您应该至少有3 * d * d = 2700行。对于每个集群,即。从你的情节来看,你至少有16个星团,所以你应该有大约50000点。或者更少的维度。

最后但并非最不重要的是,我不知道等高线图是否超出2维(如果你有3D可视化,可能是3维)

答案 1 :(得分:1)

但列是......?我想是集群。

 M = csvread ('C:\Users\Riyadh\Desktop\ThumbTouch All\HeatMaps\Tap 3 Rig R.csv', 1, 0, [1 0 870-1 0 ] )
 [n m] = size(M);
 C=hsv(m);
 for i=1:2:m,


 idx = find ((M(:,i)>0) & (M(:,i+1)>0));

 % evaluate center
 xc=mean(M(idx,i));
 yc=mean(M(idx,i+1));
 % evaluate standard deviation
 xs=std(M(idx,i));
 ys=std(M(idx,i+1));  
 hold on;
 %draw
 rectangle('Position',[xc-3*xs,yc-3*ys,6*xs,6*ys],'Curvature',[1,1], 'EdgeColor', C(i,:), 'FaceColor', C(i,:));
 rectangle('Position',[xc-2*xs,yc-2*ys,4*xs,4*ys],'Curvature',[1,1], 'EdgeColor', C(i,:)*0.9, 'FaceColor', C(i,:)*0.8);

 %plot points
 plot(M(idx,i), M(idx,i+1),'.', 'Color', C(i,:)*0.7); 
 end

代码

  1. 导入M上的数据
  2. 然后它获取colums 2 x 2(x=M(:,i), y=M(:,i+1)
  3. 计算中心和标准差,
  4. 最后它为每个群集绘制了两个圆圈和点。

    result