我有 42 个变量,我已经在 Matlab 中计算了它们的相关矩阵。现在我想用一个模式球来可视化它。有没有人有任何建议/经验如何在 Matlab 中完成?以下图片将更好地解释我的观点:
在图片中,变量之间的每条抛物线都意味着它们之间的相关强度。线越粗,相关性越高。我更喜欢图 1 的风格,而不是图 2 中的风格,我使用不同的颜色来突出相关性的强度。
我有 42 个变量,我已经在 Matlab 中计算了它们的相关矩阵。现在我想用一个模式球来可视化它。有没有人有任何建议/经验如何在 Matlab 中完成?以下图片将更好地解释我的观点:
在图片中,变量之间的每条抛物线都意味着它们之间的相关强度。线越粗,相关性越高。我更喜欢图 1 的风格,而不是图 2 中的风格,我使用不同的颜色来突出相关性的强度。
我猜有点完成了.. 代码可以在 github上找到。文件中包含文档。
黄色/洋红色(用于正/负相关)以及标签的字体大小和绘制标签的角度是可配置的,因此您可以根据需要获得幻想,而不是将它们沿周边均匀分布/分组一些/...
如果您想实际打印这些图形或在 matlab 之外使用它们,我建议使用矢量格式(例如 eps)。放大/缩小时文本调整大小也很烦人,但我不知道有什么方法可以在不破解缩放功能的情况下解决这个问题:/
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并将尽快更新链接。
Gunther Struyf的贡献有一些不同:
遵循演示、自定义标签和创意定制的示例。注意:第一个数字是用 导出的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(h.l(~isnan(h.l)), 'LineWidth',1.2)
set(h.s, 'MarkerEdgeColor','red','LineWidth',2,'SizeData',100)
set(h.t, 'EdgeColor','white','LineWidth',1)
默认颜色图:
为了改进屏幕渲染,您可以使用实验性-hgVersion 2
开关启动 MATLAB,该开关现在默认生成抗锯齿图形(来源:HG2 更新 | 未记录的 Matlab)。但是,如果您尝试保存该图,该文件将具有通常的旧抗锯齿渲染,因此这里是 Gunther 模式球的打印屏幕图像:
重要更新:
您现在可以使用 FileExchange 提交在 Matlab 中执行此操作:
http://www.mathworks.com/matlabcentral/fileexchange/48576-circulargraph
这里有一个 Matlab 的例子:
http://uk.mathworks.com/examples/matlab/3859-circular-graph-examples
这给出了这种美丽的情节:
巧合的是,Cleve Moler(MathWorks 首席数学家)在他最近的博客文章中展示了这种情节的一个例子(不像你的例子那么漂亮,连接线是直线而不是抛物线,但它看起来很实用)。不幸的是,他没有直接包含代码,但如果你在帖子上给他留下评论,他通常非常愿意分享东西。
对您来说更好的是,他还应用(这次包括)代码来置换数组的行/列,以最大限度地提高高度连接节点的空间接近度,而不是在圆周上随机排列它们。你最终会得到一个“新月”形的连接线包络,新月形的粗一点代表连接度最高的节点。
然而不幸的是,我怀疑如果您需要增强他的代码以在示例图中获得非常窄的高分辨率线条,那么 MATLAB 目前的非抗锯齿图形还不能完全满足它。