On Sep 26, 2008, at 5:01 PM, Eric Firing wrote:
> Also, if an image cannot be resolved by the output device, info is
> lost--one might not see anything at a location where there actually
> is a value--whereas with markers, a marker will always show up, and
> the only problem is that one can't necessarily distinguish a single
> point from a cluster.
>
> The real problem with all-zero values is that plot can't handle
> "plot([],[])". One can work around this by putting in bogus values
> to plot a single point, saving the line, and then setting the line
> data to empty; or, better, by not using the high-level plot command,
> but by generating the Line2D object and adding it to the axes. The
> Line2D initializer is happy with empty x and y sequences. I think if
> you use this approach it will kill two bugs (failure on all-zeros
> with sparse and full arrays) with one very simple stone.
>
> Eric
Thanks for the tip Eric. Below is a patch for spy that implements
Eric's suggestion. This patch seems to work for a couple simple tests
on my end: sparse and dense arrays with non-zero and all-zero values.
A couple of notes:
* the call to `add_artist` isn't needed to show the correct plot, but
it may be helpful for debugging.
* the docstring for `spy` suggests that a Line2D instance is returned,
but `spy` currently returns a list with a Line2D instance. I set all-
zero arrays to return a list also, for consistency.
-Tony
Index: matplotlib/lib/matplotlib/axes.py
===================================================================
--- matplotlib/lib/matplotlib/axes.py (revision 6123)
+++ matplotlib/lib/matplotlib/axes.py (working copy)
@@ -6723,9 +6723,9 @@
else:
if hasattr(Z, 'tocoo'):
c = Z.tocoo()
- y = c.row
- x = c.col
- z = c.data
+ nonzero = c.data != 0.
+ y = c.row[nonzero]
+ x = c.col[nonzero]
else:
Z = np.asarray(Z)
if precision is None: mask = Z!=0.
@@ -6733,8 +6733,12 @@
y,x,z = mlab.get_xyz_where(mask, mask)
if marker is None: marker = 's'
if markersize is None: markersize = 10
- lines = self.plot(x, y, linestyle='None',
- marker=marker, markersize=markersize,
**kwargs)
+ if len(x) == 0:
+ lines = [mlines.Line2D([], [])]
+ self.add_artist(lines[0])
+ else:
+ lines = self.plot(x, y, linestyle='None',
+ marker=marker, markersize=markersize,
**kwargs)
nr, nc = Z.shape
self.set_xlim(xmin=-0.5, xmax=nc-0.5)
self.set_ylim(ymin=nr-0.5, ymax=-0.5)
Index: matplotlib/examples/pylab_examples/masked_demo.py
===================================================================
--- matplotlib/examples/pylab_examples/masked_demo.py (revision 6123)
+++ matplotlib/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: matplotlib/examples/misc/rec_groupby_demo.py
===================================================================
--- matplotlib/examples/misc/rec_groupby_demo.py (revision 6123)
+++ matplotlib/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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel