Tony S Yu wrote:
>
> 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.
Tony,
Thanks. I will take care of this shortly, along with fixing the failure
of plot([],[]) and maybe a few other things.
Eric
>
> 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