如何在Matlab中将相关matrix可视化为模式球

我有42个variables,我已经在Matlab中计算了它们的相关matrix。 现在我想用一个模拟球来想象它。 有没有人有任何build议/经验如何可以在Matlab中完成? 以下图片将更好地解释我的观点:

SCHEMABALL

在这里输入图像说明

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

有点完成我猜..代码可以在这里findgithub 。 文件包含在文件中。

黄色/洋红色(用于正/负相关)是可configuration的,标签的字体大小以及标签的angular度也是可以configuration的,所以如果你愿意,你可以很喜欢,而不是沿着周边/组一些/ …

如果你想实际打印这些graphics或在MATLAB之外使用它们,我build议使用vector格式(例如eps)。 这也是令人讨厌的是,当你放大/缩小文本的大小,但我不知道有什么办法解决这个问题,而不是黑客的缩放function:/

 schemaball % demo 

在这里输入图像说明

 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))) 

在这里输入图像说明

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

在这里输入图像说明

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

与Struyf的贡献有一些分歧:

  1. 您可以将手柄返回到graphics对象以进行完全手动自定义
  2. 标签的方向允许最大限度的可读性
  3. 该图延伸以适应标签,使轴保持不变
  4. 语法只需要相关matrix(但允许可选的input)
  5. 针对性能进行了优化。

遵循演示,自定义标签和创意自定义的示例 。 注意:第一个数字是用saveas()导出的,其他所有数据用export_fig

 schemaball 

在这里输入图像说明在这里输入图像说明

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

在这里输入图像说明

 h = schemaball; set(hl(~isnan(hl)), 'LineWidth',1.2) set(hs, 'MarkerEdgeColor','red','LineWidth',2,'SizeData',100) set(ht, 'EdgeColor','white','LineWidth',1) 

在这里输入图像说明

默认的颜色表:

在这里输入图像说明

为了改善屏幕渲染,您可以使用experimental -hgVersion 2开关启动MATLAB,默认情况下会生成anti / aliasedgraphics(source: HG2 update | Undocumented Matlab )。 但是,如果您试图保存graphics,则文件将具有通常的旧的反锯齿渲染,因此这里是Gunther的仿形球的打印屏幕图像:

在这里输入图像说明

重要更新:

你现在可以在Matlab中使用FileExchange提交:

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

在这里有一个由Matlab的exmample:

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

这给了这种美丽的情节:

在这里输入图像说明

在这里输入图像说明

巧合的是,Cleveler(MathWorks首席math家)在他最近的博客文章中展示了这样的情节的一个例子(不像你的例子那样美丽,而且连接线是直的而不是抛物线的,但是它看起来是function性的)。 不幸的是,他没有直接包含代码,但如果你留下他对post的评论,他通常很愿意分享的东西。

对你而言更好的是,他还应用(并且这次包括)代码来排列数组的行/列,以使得高度连接的节点的空间邻近度最大化,而不是围绕圆周随机sorting它们。 最终形成一个“新月形”连接线的包络线,新月的厚点代表最高度连接的节点。

不幸的是,我怀疑如果你需要增强他的代码来获得你的示例图中非常狭窄的高分辨率线条,那么MATLAB目前的非反锯齿graphics还不够完善。

我最近一直在用MATLAB数据和D3可视化库进行类似graphics的实验 – 有几种相关types的圆形可视化可能会感兴趣,其中很多是交互式的。 另一个有用的,烘焙的,免费的选项是Circos ,它可能是你在大众媒体上看到的这些graphics的更漂亮的版本的负责人。