如何将相关矩阵可视化为Matlab中的模式球

时间:2013-06-11 07:10:13

标签: matlab plot visualization correlation graph-visualization

我有42个变量,我在Matlab中计算了它们的相关矩阵。现在我想用一个模式球来形象化它。有没有人有任何建议/经验如何在Matlab中完成?以下图片将更好地解释我的观点:

SCHEMABALL

enter image description here

在图片中,变量之间的每个抛物线都意味着它们之间的相关强度。线越粗,相关性越大。我比图2中的风格更喜欢图片1的风格,在那里我使用了不同的颜色来突出相关的强度。

5 个答案:

答案 0 :(得分:24)

有点完,我猜..代码可以找到here at github。 文档包含在文件中。

黄色/洋红色(用于正/负相关)是可配置的,以及标签的字体大小和标签的绘制角度,因此如果您愿意,您可以获得幻想,而不是均匀地分布它们周边/小组一些/...

如果你想实际打印这些图形或在matlab外部使用它们,我建议使用矢量格式(例如eps)。放大/缩小时文本调整大小也很烦人,但我不知道如何在不破解缩放功能的情况下解决这个问题:/

schemaball % demo

enter image description here

schemaball(arrayfun(@num2str,1:10,'uni',false), rand(10).^8,11,[0.1587 0.8750],[0.8333 1],2*pi*sin(linspace(0,pi/2-pi/20,10)))

enter image description here

schemaball(arrayfun(@num2str,1:50,'uni',false), rand(50).^50,9)

enter image description here

答案 1 :(得分:24)

我已完成并将我的版本提交给FEX: schemaball,并会尽快更新链接。

Gunther Struyf的贡献存在一些差异:

  1. 您可以将句柄返回到图形对象以进行完全手动自定义
  2. 标签的方向是允许最大的从左到右的可读性
  3. 图形拉伸以适合标签,保持轴不变
  4. 语法只需要关联矩阵(但允许可选输入)
  5. 针对性能进行了优化。
  6. 关注演示,自定义标签和广告素材自定义的示例。 注意:第一个数字是使用saveas()导出的,其他所有数据都是export_fig

    schemaball
    

    enter image description here enter image description here

    x      = rand(10).^3;
    x(:,3) = 1.3*mean(x,2);
    schemaball(x, {'Hi','how','is','your','day?', 'Do','you','like','schemaballs?','NO!!'})
    

    enter image description here

    h = schemaball;
    set(h.l(~isnan(h.l)), 'LineWidth',1.2)
    set(h.s, 'MarkerEdgeColor','red','LineWidth',2,'SizeData',100)
    set(h.t, 'EdgeColor','white','LineWidth',1)
    

    enter image description here

    默认色图:

    enter image description here

    要改善屏幕上的 渲染,您可以使用实验-hgVersion 2开关启动MATLAB,现在默认生成反/混叠图形(来源:HG2 update | Undocumented Matlab)。但是,如果你试图保存图形,文件将具有通常的旧抗锯齿渲染,所以这里是Gunther的schemaball的打印屏幕图像:

    enter image description here

答案 2 :(得分:5)

重要更新:

您现在可以使用FileExchange提交在Matlab中执行此操作:

http://www.mathworks.com/matlabcentral/fileexchange/48576-circulargraph

Matlab有一个例子:

http://uk.mathworks.com/examples/matlab/3859-circular-graph-examples

这给出了这种美丽的情节:

enter image description here

enter image description here

答案 3 :(得分:3)

巧合的是,Cleve Moler(MathWorks首席数学家)在他最近的blog post上展示了这种情节的一个例子(不像你的例子那样漂亮,而且连线是直的而不是抛物线,但看起来很实用)。不幸的是他没有直接包含代码,但是如果你留下他对帖子的评论,他通常很愿意分享这些内容。

对你来说更好的是,他还应用(并且这次包括)代码来置换数组的行/列,以便最大化高度连接节点的空间接近度,而不是随机排序它们。周。你最终得到了一个“新月形”的连接线包络,新月的厚位代表了连接最多的节点。

不幸的是,我怀疑如果你需要增强他的代码来获得你的示例图中非常窄的高分辨率线,那么MATLAB目前没有抗锯齿的图形还不是很好。< / p>

答案 4 :(得分:2)

我最近一直在尝试使用MATLAB数据和类似图的D3 visualization library - 您可能会对几种相关类型的圆形可视化感兴趣,其中许多都是交互式的。另一个有用的,精心挑选的,免费提供的选项是Circos,这可能是您在大众媒体中看到的这些图表的大多数更漂亮的版本。