web-dev-qa-db-ja.com

Matlabで相関行列をスキーマボールとして視覚化する方法

42の変数があり、それらの相関行列をMatlabで計算しました。今、それをスキーマボールで視覚化したいと思います。誰かがこれをMatlabでどのように行うことができるか提案/経験がありますか?次の写真は私のポイントをよりよく説明します:

SCHEMABALL

enter image description here

写真では、変数間の各放物線は、変数間の相関の強さを意味します。線が太いほど相関が高くなります。相関の強さを強調するために別の色を使用した図2のスタイルよりも、図1のスタイルの方が好きです。

42
jjepsuomi

ちょっと終わったと思います。コードは見つかります ここ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

24
Gunther Struyf

my versionを完成させて FEX:schemaball に送信し、リンクをできるだけ早く更新します。

Gunther Struyf の貢献にはいくつかの違いがあります。

  1. ハンドルをグラフィックオブジェクトに戻し、完全に手動でカスタマイズできます。
  2. ラベルは、左から完全に読みやすくするために配置されています
  3. 図は、ラベルを合わせるために引き伸ばされ、軸は変更されません。
  4. 構文には相関行列のみが必要です(ただし、オプションの入力が可能です)
  5. パフォーマンスを最適化。

デモ、カスタムラベル、クリエイティブのカスタマイズのexamplesに従ってください。注:最初の図は saveas() でエクスポートされ、他のすべての図は export_fig でエクスポートされました。

schemaball

enter image description hereenter 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 ) 。ただし、Figureを保存しようとすると、ファイルには通常の古いアンチエイリアス処理されたレンダリングが含まれるため、Guntherのスキーマボールのプリントスクリーンイメージを次に示します。

enter image description here

24
Oleg

重要な更新:

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

5
Ander Biguri

偶然にも、Cleve Moler(MathWorksの主任数学者)は彼の最新の blog post にこの種のプロットの例を示しました(例の例ほど美しくなく、接続線は直線的です)放物線よりも、機能的に見えます)。残念ながら、彼はコードを直接含めていませんでしたが、投稿にコメントを残しておけば、たいていは喜んで情報を共有してくれます。

さらに優れているのは、高度に接続されたノードの空間的近接性を最大化するために、配列の行/列を並べ替えるためにコードを適用(今回も含む)することです。最終的に、三日月形の太いビットが最も高度に接続されたノードを表す、三日月形の接続線のエンベロープができます。

ただし、残念ながら、サンプルプロットで非常に細い高解像度のラインを取得するために彼のコードを拡張する必要がある場合、MATLABの現在のアンチエイリアス処理されていないグラフィックスは、まだ十分ではないと思います。

3
Sam Roberts

最近、MATLABデータと D3視覚化ライブラリ を同様のグラフで実験しています-関心のある円形の視覚化にはいくつかの関連するタイプがあり、それらの多くはインタラクティブです。もう1つの役立つ、よく焼き上げられた、自由に利用できるオプションは Circos で、これはおそらく、人気のあるプレスで見たこれらのグラフのよりきれいなバージョンのほとんどの原因です。

2
MSommer