如何在python中使用颜色代码绘制矩阵稀疏模式?

时间:2014-06-03 11:26:18

标签: python colors matplotlib sparse-matrix

我正在使用matplotlib.pyplot中的间谍从scipy.sparse中绘制csc_matrix的稀疏模式,如下所示

>>> import scipy.sparse as sprs
>>> import matplotlib.pyplot as plt
>>> Matrix=sprs.rand(10,10, density=0.1, format='csc')
>>> plt.spy(Matrix)
>>> plt.show()

我想做同样的事情,但根据矩阵元素的大小给出颜色。 是否有一种简单的方法让间谍这样做?如果没有,还有其他办法吗?

3 个答案:

答案 0 :(得分:2)

我遇到了类似的问题。我的解决方案:使用带有颜色条的散点图。

基本上我有一个 100 x 100 的稀疏矩阵,但我想可视化所有点和点的值。

imshow 不是稀疏矩阵的好解决方案,因为根据我的经验,它可能无法显示所有点!对我来说,这是一个严重的问题。

spy 对于稀疏矩阵是可靠的,但您不能添加颜色条。

所以我尝试提取非零值并将它们绘制在散点图中,并根据非零元素的值添加一个颜色条。

示例如下:

import numpy as np
import matplotlib.pyplot as plt

# example sparse matrix with different values inside
mat = np.zeros((20,20))
mat[[1,5,5,5,10,15],[1,4,5,6,10,15]] = [1,5,5,5,10,15]

fig,ax = plt.subplots(figsize=(8, 4), dpi= 80, facecolor='w', edgecolor='k')

# prepare x and y for scatter plot
plot_list = []
for rows,cols in zip(np.where(mat!=0)[0],np.where(mat!=0)[1]):
    plot_list.append([cols,rows,mat[rows,cols]])
plot_list = np.array(plot_list)

# scatter plot with color bar, with rows on y axis
plt.scatter(plot_list[:,0],plot_list[:,1],c=plot_list[:,2], s=50)
cb = plt.colorbar()

# full range for x and y axes
plt.xlim(0,mat.shape[1])
plt.ylim(0,mat.shape[0])
# invert y axis to make it similar to imshow
plt.gca().invert_yaxis()

Resulting figure inverted y axis

答案 1 :(得分:1)

您可以使用imshow

d=Matrix.todense()
plt.imshow(d,interpolation='none',cmap='binary')
plt.colorbar()

给出:

enter image description here

答案 2 :(得分:0)

matplotlib中有一个函数可以可视化稀疏矩阵的模式,但是非零元素都具有相同的颜色。

import matplotlib.pylab as plt
import scipy.sparse as sparse

A = sparse.eye(100)
plt.spy(A)