 # Matrix Structure Plots

John Hunter wrote:

> Does it work for SciPy sparse matrices
> (e.g. scipy.sparse.csr_matrix)? I don't think so... That
> is why I provided my solution. Otherwise, of course, I am
> well aware of spy, spy2 >> I see -- can you post a simple example (with version nums for
>> numpy/scipy/mpl) that exposes the bug. Hopefully there will be
>> an easy fix.

> Sure:

> matplotlib: 0.87.2-r2

> from SVN: numpy: Checked out revision 2433. scipy:
> Checked out revision 1888.

> The problem is, that you cannot use 'where' for sparse
> matrices yet...

For spy we can use

def spy(self, Z, marker='s', markersize=10, **kwargs):
"""
SPY(Z, **kwargs) plots the sparsity pattern of the matrix Z
using plot markers.

kwargs give the marker properties - see help(plot) for more
information on marker properties

The line handles are returned
"""
if hasattr(Z, 'tocoo'):
c = Z.tocoo()
x = c.row
y = c.col
z = c.data
else:
x,y,z = matplotlib.mlab.get_xyz_where(Z, Z>0)
return self.plot(x+0.5,y+0.5, linestyle='None',
marker=marker,markersize=markersize, **kwargs)

you may want to plug this into your axes.py and test.

For spy2 it is a bit tricker, since it uses an image. One option
would be to create a regular array of dimensions MxN and fill in the
nonempty cells, but this kind of defeats the purpose of using sparse
arrays. Another is to use a special purpose RegularPolygonCollection,
and build rectangles at each non-zero pixel. I like this option best
because it preserves sparsity and allows colormapping, etc..

JDH