我在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 ] )
第二张图片显示了我目前所拥有的内容。
答案 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
代码
x=M(:,i), y=M(:,i+1)
)最后它为每个群集绘制了两个圆圈和点。