2016-10-11 21 views
1

私は疎な行列X、形(6000,300)を持っています。私はドットがX(i、j)!= 0で、それ以外の場合は空白がある散布図のようなものが好きです。 X [0]には15個の非ゼロエントリ、X [1]には3個などがあります。行内の非ゼロエントリの最大数は16です。Python:疎行列をプロットする

試み:なぜならplt.imshow(X, aspect='auto)を使用してXの形状の背が高く、痩せグラフで

  • plt.imshow(X)結果が水平にグラフを伸ばしますが、ドットが楕円になるように伸ばします、とプロットが読みにくくなります。
  • ax.spyは同じ問題を抱えています。
  • bokehは有望ですが、本当に私のジュピターカーネルには税金がかかります。

ボーナス:

  • Xの非ゼロ要素は正の実数です。その大きさを反映する方法があれば、それも素晴らしいでしょう(例えば、色の濃さ、透明度、またはカラーバー全体)。
  • Xの500行ごとに同じクラスに属します。それは12のクラス*クラスあたり500の観測(行)= 6000行。例えば。 X [:500]はクラスAから、X [500:1000]はクラスBからです。クラスによってドットを色分けするのは良いでしょう。現時点では、500行ごとに水平線を含めて手作業で解決し、クラス間を線引きします。

答えて

1

あなたは非ゼロ要素を見つけて、scatter()プロットポイントを使用するnonzero()を使用することができます。

import pylab as pl 
import numpy as np 

a = np.random.rand(6000, 300) 
a[a < 0.9999] = 0 
r, c = np.nonzero(a) 
pl.scatter(r, c, c=a[r, c]) 
0

ヒートマップは、このタイプのプロットの最良の候補です。 imshow()は、カラースケールの凡例を持つ色付きの行列を返します。

私は伸びた楕円の問題を起こさない、それは各データポイントのための着色されたsquredでなければならない?

スパースの場合は、ログカラースケールを試すことができます。クラス間の相違があるかどうかを分析するために、12個のクラスを別々にプロットする。

0

plt.matshowも実行可能な解決策であることが判明しました。カラーバーとそのすべてを使ってヒートマップをプロットすることもできます。

関連する問題