在Matlab

时间:2017-05-23 21:28:52

标签: matlab graph graphics matlab-figure pearson-correlation

在Matlab中,我有一个n^2 x n^2矩阵Corr_M,其中包含一组n x n矩阵M的所有条目之间的Pearson相关系数,这样{{1} }}是集合中某些Corr_M(i,j)的{​​{1}}和M(i)之间的相关系数。请注意,M(j)是对称的。

我想通过显示M的不同条目之间的链接来图Corr_M,其中Corr_MM之间的链接是彩色的,例如,红色M(i) 1}}是正的,如果是负的,则为蓝色。链接的厚度表示相关性有多强(优选地,链接间隔0.1,可能甚至更小,可区分)。

对于M(j) Corr_M(i,j),这可能如下所示:

enter image description here

并非所有条目都将被连接,因为其中许多条目不相关(因此相关系数为零不会导致显示链接)。请注意,未显示自相关。诸如在底行中看到的实例(其中一个天真的实现可能只是将一行放在另一行之上)是有问题的,但是这样的天真实现仍然是非常受欢迎的。

有没有一种标准的方法可以做到这一点,也许是使用Matlab的一些内置图形理论函数(遗憾的是,我不知道其范围)?

如果没有,那我该如何实现呢?

1 个答案:

答案 0 :(得分:2)

您可以在Matlab中尝试graph对象。以下示例假定您的Corr_Mn x n矩阵(见下文):

% set the source of the lines:
s = repelem(1:n-1,n-1:-1:1);
% set the target of the lines:
t = nonzeros(triu(repmat(2:n,n-1,1)).').';
Corr_M(~Corr_M) = nan; % replace zero weights with nan
weights = nonzeros(tril(Corr_M,-1));
% create the graph object:
G = graph(s,t,weights,n);
% mark the lines to remove from the graph:
threshold = 0.4; %  minimum correlation to plot
line_to_remove = isnan(weights) | abs(weights)<threshold;
% remove the lines from the graph:
G = G.rmedge(find(line_to_remove)); %#ok<FNDSB>
% plot it:
p = plot(G); % for labeling the lines uncomment add: 'EdgeLabel',G.Edges.Weight
p.NodeColor = 'k';
% color positive in blue and negative in red:
p.EdgeColor = [G.Edges.Weight<0.' zeros(numel(G.Edges.Weight),1) G.Edges.Weight>0.'];
% set the thickness of the lines:
p.LineWidth = abs(G.Edges.Weight)*5;
axis off

如果您希望节点位于网格中,则需要设置绘制图形的XDataYData属性。

% get the grid coordinates for all nodes
[x,y] = ndgrid(1:ceil(sqrt(n)),1:ceil(sqrt(n)));
x = x(:);
y = y(:);
% set the nodes in a 'grid' structure
p.XData = x(1:n);
p.YData = y(1:n);
axis ij % flip the plot so it will be orderd like in a matrix

n = 9它看起来像这样(使用一些随机Corr_M):

Corr_M =
            0            0            0            0            0            0            0            0            0
       0.9504            0            0            0            0            0            0            0            0
     0.016371      0.24554            0            0            0            0            0            0            0
     -0.11467     -0.19375     -0.30812            0            0            0            0            0            0
     -0.01241    -0.090871      0.74444      0.34121            0            0            0            0            0
     -0.21623      0.36844      0.83935     -0.83914     -0.12302            0            0            0            0
    -0.011428   -0.0077929     -0.26243     -0.98249     -0.57997      0.55024            0            0            0
      0.64245      -0.6027      0.51424      0.62646      0.32854      0.18052     0.055688            0            0
     -0.51699      0.47885      0.44677      0.18128      0.26819     -0.67849    -0.034057      0.28652            0

corr_graph

图形图的一个问题是您无法更改的非常小的文本。如果这很重要,请阅读following suggestion