When sparse matrices have explicit zero values, `axes.spy` plots those  
zero values. This behavior seems unintentional. For example, the  
following code should have a main diagonal with markers missing in the  
middle, but `spy` currently plots a full main diagonal.

#~~~~~~~~~~~
import scipy.sparse as sparse
import matplotlib.pyplot as plt

sp = sparse.spdiags([[1,1,1,0,0,0,1,1,1]], [0], 9, 9)
plt.spy(sp, marker='.')
#~~~~~~~~~~~

Below is a patch which only plots the nonzero entries in a sparse  
matrix. Note, sparse matrices with all zero entries raises an error;  
this behavior differs from dense matrices. I could change this  
behavior, but I wanted to minimize the code changed.

Cheers,

-Tony

PS: this patch also includes two trivial changes to some examples.

Index: lib/matplotlib/axes.py
===================================================================
--- lib/matplotlib/axes.py      (revision 6122)
+++ lib/matplotlib/axes.py      (working copy)
@@ -6723,9 +6723,11 @@
          else:
              if hasattr(Z, 'tocoo'):
                  c = Z.tocoo()
-                y = c.row
-                x = c.col
-                z = c.data
+                nonzero = c.data != 0.
+                if all(nonzero == False):
+                    raise ValueError('spy cannot plot sparse zeros  
matrix')
+                y = c.row[nonzero]
+                x = c.col[nonzero]
              else:
                  Z = np.asarray(Z)
                  if precision is None: mask = Z!=0.
Index: examples/pylab_examples/masked_demo.py
===================================================================
--- examples/pylab_examples/masked_demo.py      (revision 6122)
+++ examples/pylab_examples/masked_demo.py      (working copy)
@@ -1,4 +1,4 @@
-#!/bin/env python
+#!/usr/bin/env python
  '''
  Plot lines with points masked out.

Index: examples/misc/rec_groupby_demo.py
===================================================================
--- examples/misc/rec_groupby_demo.py   (revision 6122)
+++ examples/misc/rec_groupby_demo.py   (working copy)
@@ -2,7 +2,7 @@
  import matplotlib.mlab as mlab


-r = mlab.csv2rec('data/aapl.csv')
+r = mlab.csv2rec('../data/aapl.csv')
  r.sort()

  def daily_return(prices):


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to