Python:绘制稀疏矩阵

时间:2016-10-11 04:29:47

标签: python matplotlib

我有一个稀疏矩阵X,形状(6000,300)。我喜欢像散点图这样的东西,其中有一个点,其中X(i,j)!= 0,否则就是空白。我不知道X的每一行有多少非零项.X [0]有15个非零项,X [1]有3个,等等。一行中非零项的最大数目是16。 / p>

尝试:

    由于X的形状,
  • plt.imshow(X)会产生一个高大的瘦图。使用plt.imshow(X, aspect='auto)会水平拉伸图形,但点会伸展成椭圆形,图形变硬阅读。
  • ax.spy遇到同样的问题。
  • bokeh似乎很有希望,但真正对我的jupyter内核征税。

加成:

  • X的非零条目是正实数。如果有某种方法可以反映它们的大小,那也会很好(例如颜色强度,透明度或颜色条)。
  • 每500行X属于同一个类。这个12类* 500个观察(行)每个类= 6000行。例如。 X [:500]来自A类,X [500:1000]来自B类等。按类对点进行颜色编码会很不错。目前,我会手动包括每500行的水平线,以便在类之间进行描绘。

3 个答案:

答案 0 :(得分:1)

您可以使用nonzero()查找非零元素,并使用scatter()绘制点数:

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

答案 1 :(得分:0)

在我看来,热图是这类情节的最佳人选。 imshow()将返回带有色标图例的彩色矩阵。

我没有得到你的拉伸椭圆问题,不应该是每个数据点的彩色方块吗?

如果稀疏,你可以尝试记录颜色标度。还分别绘制了12个班级,以分析是否有任何班级差异。

答案 2 :(得分:0)

plt.matshow也证明是一个可行的解决方案。我还可以绘制带有色条的热图以及所有这些。