Re: [matplotlib-devel] RFC: candidates for a new default colormap

2015-06-03 Thread Todd
On Wed, Jun 3, 2015 at 3:46 AM, Nathaniel Smith n...@pobox.com wrote:

 Hi all,

 As was hinted at in a previous thread, Stéfan van der Walt and I have
 been using some Fancy Color Technology to attempt to design a new
 colormap intended to become matplotlib's new default. (Down with jet!)

 Unfortunately, while our Fancy Color Technology includes a
 computational model of perceptual distance, it does not include a
 computational model of aesthetics. So this is where you come in.

 We've put up three reasonable candidates at:
 https://bids.github.io/colormap/
 (along with some well-known colormaps for comparison), and we'd like
 your feedback.

 They are all optimal on all of the objective criteria we know how to
 measure. What we need judgements on is which one you like best, both
 aesthetically and as a way of visualizing data. (There are some sample
 plots to look at there, plus you can download them and play with them
 on your own data if you want.)

 We especially value input from anyone with anomalous color vision.
 There are some simulations there, but computational models are
 inherently limited here. (It's difficult to ask someone with
 colorblindness does this look to you, the same way this other picture
 looks to me?)

 -n


I assume these are all going to be available as colormaps?

I prefer C, the others seem to dark.  Having too much black doesn't strike
me as very aesthetically pleasing.

So I would say C  B  A
--
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] release strategy and the color revolution

2015-02-28 Thread Todd
On Feb 19, 2015 1:39 AM, Nathaniel Smith n...@pobox.com wrote:

 On Feb 16, 2015 3:39 PM, Eric Firing efir...@hawaii.edu wrote:
 
  On 2015/02/16 1:29 PM, Michael Waskom wrote:
 
   Nathaniel's January 9 message in that thread (can't figure out how to
   link to it in the archives) had a suggestion that I thought was very
   promising, to do something similar to Parula but rotate around the hue
   circle the other direction so that the hues would go blue - purple -
red
   - yellow. I don't think we've seen an example of exactly what it would
   look like, but I reckon it would be similar to the middle colormap
here
  
http://earthobservatory.nasa.gov/blogs/elegantfigures/files/2013/08/three_perceptual_palettes_618.png
   (from the elegant figures block series linked above), which I've
always
   found quite attractive.
 
  Certainly it can be considered--but we have to have a real
implementation.

 While I hate to promise vaporware, I actually was planning to have a
 go at implementing such a colormap in the next few weeks, based on
 optimizing the same set of parameters that viscm visualizes... FWIW.

 Are we planning to make other default appearance changes at the same
 time? The idea of changing the color cycle and/or dot-dash cycle has
 already come up in this thread, and this earlier thread proposed
 several more good ideas [1]:

http://thread.gmane.org/gmane.comp.python.matplotlib.devel/13128/focus=13166



If the goal is still to put all the appearance-related changes in a single
release (to simplify changes to downstream unit tests), but nobody has
stepped up to make changes except to the colors, might it be possible to
just adopt the default seaborn style (except for colors, of course)?  If
anybody is strongly motivated to make changes they can, but if nobody does
there would still be a good, modern, pleasant-looking style used by default.
--
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Release planning/milestones

2015-02-17 Thread Todd
I wasn't referring to just the default colors, but the default style in
general. Things like background, line thickness, padding, ticks, etc. I
thought that there was agreement that the default matplotlib style is not
optimal,  and that the point of the 2.0 release was to put all the
stylistic changes in one release so people don't have to keep changing
their unit tests.

On Feb 8, 2015 11:04 PM, Thomas Caswell tcasw...@gmail.com wrote:

 To overhauling all of the default colors, I think that is still in the
cards, but some one who is not me needs to drive that.

 The goal of pulling pyplot out of backend_bases is exactly that, to be
able to do everything using the OO interface in a convenient way.

 Tom

 On Sun Feb 08 2015 at 4:50:51 PM Todd toddr...@gmail.com wrote:


 On Feb 8, 2015 1:13 AM, Thomas Caswell tcasw...@gmail.com wrote:
 
  Hey all,
 
  To start with, the 2.0 release is pending a choice of new default
color map.  I think that when we pick that we should cut 2.0 off of the
last release and then the next minor release turns into 2.1.  If we want to
do other breaking changes we will just do a 3.0 when that happens.  It
makes sense to me to bundle default color changes as one set of breaking
changes and code API changes as another.

 I thought there was going to be a complete overhaul of the default
theme?  Has that idea been abandoned?

   - making OO interface easier to use interactively (if interactive,
auto-redraw at sensible time)
 
   - pull the pyplot state machine out of backend_bases and expose the
figure_manager classes

 Do either of these mean that it will be possible to use the OO interface
without needing to go through pyplot?


--

 Dive into the World of Parallel Programming. The Go Parallel Website,
 sponsored by Intel and developed in partnership with Slashdot Media, is
your
 hub for all things parallel software development, from weekly thought
 leadership blogs to news, videos, case studies, tutorials and more. Take
a
 look and join the conversation now.
http://goparallel.sourceforge.net/___
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
--
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration  more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Release planning/milestones

2015-02-08 Thread Todd
On Feb 8, 2015 1:13 AM, Thomas Caswell tcasw...@gmail.com wrote:

 Hey all,

 To start with, the 2.0 release is pending a choice of new default color
map.  I think that when we pick that we should cut 2.0 off of the last
release and then the next minor release turns into 2.1.  If we want to do
other breaking changes we will just do a 3.0 when that happens.  It makes
sense to me to bundle default color changes as one set of breaking changes
and code API changes as another.

I thought there was going to be a complete overhaul of the default theme?
Has that idea been abandoned?

  - making OO interface easier to use interactively (if interactive,
auto-redraw at sensible time)

  - pull the pyplot state machine out of backend_bases and expose the
figure_manager classes

Do either of these mean that it will be possible to use the OO interface
without needing to go through pyplot?
--
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Better defaults all around?

2014-11-27 Thread Todd
On Nov 26, 2014 10:04 PM, Nathaniel Smith n...@pobox.com wrote:

 On Wed, Nov 26, 2014 at 9:30 AM, Todd toddr...@gmail.com wrote:
  On Sat, Nov 22, 2014 at 12:22 AM, Nathaniel Smith n...@pobox.com wrote:
 
  - Default line colors: The rgbcmyk color cycle for line plots doesn't
  appear to be based on any real theory about visualization -- it's just
  the corners of the RGB color cube, which is a highly perceptually
  non-uniform space. The resulting lines aren't terribly high contrast
  against the default white background, and the different colors have
  varying luminance that makes some lines pop out more than others.
 
  Seaborn's default is to use a nice isoluminant variant on matplotlib's
  default:
 
 
http://web.stanford.edu/~mwaskom/software/seaborn/tutorial/aesthetics.html
  ggplot2 uses isoluminant colors with maximally-separated hues, which
  also works well. E.g.:
 
 
http://www.cookbook-r.com/Graphs/Colors_%28ggplot2%29/ggplot2_scale_hue_colors_l45.png
 
  About this, I am not expert so forgive me if this is nonsensical.
However,
  it would seem to me that these requirements are basically the same as
the
  requirements for the new default colormap that prompted this whole
  discussion.  So, rather than create two inconsistent set of colors that
  accomplish similar goals, might it be better to instead use the default
  colormap for the line colors?  You could pick N equally-spaced colors
from
  the colormap and use those as the line colors.

 The main differences in requirements are:
 - for the color cycle, you want isoluminant colors, to avoid the issue
 where one line is glaring bright red and one is barely-visible-grey.
 For general-purpose 2d colormaps, though, you almost always want the
 luminance to vary to help distinguish colors from each other.

If you used isoluminance colors for the lines, wouldn't that mean a plot
printed in grayscale would have all lines be the same shade of gray?
--
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration  more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] pyplot-OO convergence

2014-09-29 Thread Todd
On Sun, Sep 28, 2014 at 7:52 PM, Eric Firing efir...@hawaii.edu wrote:

 Regarding Matlab: it is justly popular for many reasons. It is
 relatively easy to learn both by design and because of its consistent
 high-quality documentation.  Matplotlib's success has resulted in large
 measure from its pyplot layer, which can shield learners and users from
 mpl's complexity, which allows learners to build on their Matlab
 knowledge, and which is particularly well suited to quick interactive
 data exploration.  The problem with the Matlab/pyplot approach is that
 it doesn't scale well, so we see a chorus of advice along the lines of
 don't use pyplot except for subplots() and show(); use the nice,
 explicit OO interface for everything else.  But at present, this
 doesn't work well, because the OO approach is not interactive enough,
 and using the getters and setters is clumsy when typing at the
 console--in demonstrating, teaching, learning, and exploring
 interactively, every keystroke counts!


Matlab is actually slowly trying to transition to an OO-style interface of
their own.  It has taken a LONG time, though.
--
Slashdot TV.  Videos for Nerds.  Stuff that Matters.
http://pubads.g.doubleclick.net/gampad/clk?id=160591471iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] MEP13 - python containers

2014-07-31 Thread Todd
I would suggest create a new branch, though.  You can create a new branch
from the old one, then make your changes there.  That way if you mess up
something you still have the original to fall back on.


On Thu, Jul 31, 2014 at 5:15 PM, Thomas Caswell tcasw...@gmail.com wrote:

 Git lets you re-write history pretty extensively.  If you use a tool
 on top of git (I use magit in emacs) you can selectively commit hunks
 one or two at a time.   At a minimum split it up by file.  You are
 going to have to do some force-pushing anyway.

 Making the PRs as small as reasonable makes reviewing much easier.  It
 makes it possible to go through the entire PR in one sitting and it
 allows the un-controversial stuff to be merged as quickly as possible
 without being held up by other parts.  The longer large PRs hang
 around the greater the chance they will accumulate conflicts with
 other PRs and require a re-base (re-basing a 500+ line diff is
 _incredibly_ painful).

 Tom

 On Thu, Jul 31, 2014 at 11:09 AM, jamesramm jamessr...@gmail.com wrote:
  Thomas Caswell wrote
  I only took a brief look at that branch, but two comments
 
  1) can you clean up your git history, you are adding 20k new lines (of
  mostly freetype and random files that should not be tracked)
  2) can you split the propertify work up into chunks that are easier to
  review?
 
  Yes. This is mostly my inability to use git (I've not particular used it
  before). I'll have to look up how to clean the history and 'unversion'
 the
  unneeded freetype stuff.
 
  As it is already committed to my branch, im not sure the existing stuff
 can
  be split into chunks? But I will make issues and split up the next lumps
 of
  work.
 
  I'll post back when it is (hopefully) cleaner
 
 
 
  --
  View this message in context:
 http://matplotlib.1069221.n5.nabble.com/MEP13-python-containers-tp40248p43732.html
  Sent from the matplotlib - devel mailing list archive at Nabble.com.
 
 
 --
  Infragistics Professional
  Build stunning WinForms apps today!
  Reboot your WinForms applications with our WinForms controls.
  Build a bridge from your legacy apps to the future.
 
 http://pubads.g.doubleclick.net/gampad/clk?id=153845071iu=/4140/ostg.clktrk
  ___
  Matplotlib-devel mailing list
  Matplotlib-devel@lists.sourceforge.net
  https://lists.sourceforge.net/lists/listinfo/matplotlib-devel



 --
 Thomas Caswell
 tcasw...@gmail.com


 --
 Infragistics Professional
 Build stunning WinForms apps today!
 Reboot your WinForms applications with our WinForms controls.
 Build a bridge from your legacy apps to the future.

 http://pubads.g.doubleclick.net/gampad/clk?id=153845071iu=/4140/ostg.clktrk
 ___
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

--
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] unused variables

2014-03-07 Thread Todd
On Mar 6, 2014 10:24 PM, Skip Montanaro s...@pobox.com wrote:

 On Thu, Mar 6, 2014 at 3:13 PM, Nelle Varoquaux
 nelle.varoqu...@gmail.com wrote:
  If I need to understand what exactly os.stat returns, I just read the
  documentation, and not rely on some possibly misleading variable
  names.

 Despite our wish that it wasn't so, it is likely that there is far
 more undocumented than documented code out in the wild, or behind
 firewalls where we can't see it. I just used os.stat as an example of
 a well-known function that returns multiple values. (Precisely, so
 people wouldn't have to run to the documentation or that I would have
 to provide a more-fleshed-out example.) In my experience, there's no
 real need to be intentionally obscure by not giving a variable a
 meaningful, whether or not you intend/expect to use it. Besides, open
 source code can serve as a living example of good coding practices.
 Might as well do our best in that regard.

 Just sayin'...

 Skip

Whether it is necessarily the optimal choice, I think there is something to
be said for following established conventions.  Besides the fact that IDEs
complain if you don't, it makes it easier for outside contributors to
understand what it's going on.
--
Subversion Kills Productivity. Get off Subversion  Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] matplotlib Hangout today at 14:00 UTC (10:00am ET)

2013-10-25 Thread Todd
On Oct 24, 2013 8:40 PM, Chris Barker chris.bar...@noaa.gov wrote:

 On Thu, Oct 24, 2013 at 8:29 AM, Michael Droettboom md...@stsci.edu
wrote:
  Here are the notes with action items from the meeting:

 thanks for posting that. I see:

 pylab - should it stay or should it go?

 Comment from the peanut gallery:

 Go.

I agree, but that leads to another question: go where?

Some of the stuff there is clearly redundant and should be removed entirely.

Others I think are functionality that should be merged into numpy, although
whether they would agree I don't know.

Others are useful but I don't know exactly where they could end up.

I think we need to go through on a case-by-case basis and figure out what
to do with each class and function.

I think it would probably be good to do something similar with cbook.  Both
are dumping grounds for largely unrelated functions. At the very least they
should be organized into modules by their purpose, but I do think some
should be dropped or upstreamed.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] matplotlib Hangout today at 14:00 UTC (10:00am ET)

2013-10-25 Thread Todd
I think one thing that contributes a lot to the API issues is the
inconsistency between pyplot API and the OO API.  There isn't any reason
the APIs need to be so different.

To continue with this example, pyplot.subplot and Figure.add_subplot do
basically the same thing, but they have different names.  In practice
pyplot.subplot essentially acts as a wrapper for gcf().add_subplot, but it
isn't exactly the same internally, it has some checks that are not present
in Figure.add_subplot but really should be.

On the other hand, pyplot.subplots doesn't exist at all in Figure, all the
functionality is implemented in pyplot.

So the idea would be to have essentially all of the pyplot functions just
be wrappers for methods from other classes, using the same name and same
call signature (minus self).  All of the actual functionality would be
implemented in the methods, the pyplot functions should not have any logic
or tests.

So pyplot.subplot would be just be a wrapper for gcf().subplot,
pyplot.subplots would just be a wrapper for gcf().subplots, while
pyplot.plot would just be a wrapper for gcf().gca().plot.

This will make it easy to transition between the two, learning to use the
OO interface would just involve learning what object the pyplot function is
targeting (this should be in the pyplot function docstring).

On Fri, Oct 25, 2013 at 7:21 PM, Thomas A Caswell tcasw...@uchicago.eduwrote:

 There needs to be layers to the interface.  At the bottom there is super
 general stuff that will cover (we hope) 100% of use cases.  However, the
 cost is a very verbose interface with lots of knobs.  To cope with this
 there are higher level function which can deal with 90% of the use cases
 and do so by hiding some of the knobs (compare making a 3x3 grid
 `subplots(3, 3)` with using  `GridSpec` to figuring out where the axes
 edges should go and using `add_subplot([t, l, w, h])` ).  I want to make an
 analogy to projecting from a higher dimensional parameter space to a lower
 one.

 The 'proper' api to use is the simplest one that achieves your goal.  If
 you just need a grid of evenly spaced equal size axes use `subplots`, if
 you need a grid but with some axes that span columns/rows use `GridSpec`,
 if you need 5 axes that partially overlap in the shape of your school logo,
 use `add_subplot`.

 The point of the high-level APIs is to be easy to use.  If that means
 matching the MATLAB api to make it easier for people to switch, then fine.
  I am sympathetic to the notion that the state-machine interface is
 confusing (because it maintains hidden state), but it is in fact very
 convenient.


 On Fri, Oct 25, 2013 at 10:26 AM, Daniele Nicolodi dani...@grinta.netwrote:

 On 25/10/2013 15:34, Benjamin Root wrote:

  This has already been done. We have the GridSpec API that everything
  else maps to, for compatibility. But most people still like
  add_subplot() and subplots() for some odd reason... I think the primary
  issue is one of documentation, and we are currently in the process of
  upgrading that. We always welcome contributions to that effort!

 Hello Benjamin,

 thanks for your comments.  I'm aware of the solutions you propose, but I
 maintain that the status quo is confusing for new users.

 The fact that there are multiple ways of doing the same thing, through
 apparently unrelated interfaces makes the API more difficult to learn
 and less discoverable that it needs to be.  This is probably a
 conseqence of the organic growth of the library with time.

 I agree that the primary issue is the documentation, but at the root of
 that I also feel there is the lack of well established best practices
 for the use of Matplotlib. For example you write that people still like
 add_subplot() and subplots() for odd reasons, which are the methods
 others in the lists pointed to. What would be the proper API to use in
 your opinion?  I believe convergence on best practices is paramount to
 the update of the documentation.

 I also don't really buy the argument that it is desirable to keep and
 promote APIs that try to emulate the Matlab interface.  Matplotlib is
 different enough to make a 1:1 translation difficult and the Matlab
 design is anyhow broken, IMHO.

 Best,
 Daniele

 PS: with a new job also came the possibility to finally drop Matlab and
 embrace Python as the main data analysis tool. This means that I can
 dedicate some (at the moment very few) spare cycles to contribute to
 Matplotlib. I would be happy to do so!



 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
 from
 the latest Intel processors and coprocessors. See abstracts and register 

 http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk
 ___
 Matplotlib-devel mailing list
 

Re: [matplotlib-devel] matplotlib Hangout today at 14:00 UTC (10:00am ET)

2013-10-25 Thread Todd
I think another problem is having pyplot and axes as dumping grounds for
all plot types.  This probably made sense back when there were only a few
types of plots, but now there is a massive number of them.  They all end up
in one large class with one large documentation page, making it very hard
to find exactly what you are looking for.

In order to make the plots really useful, I definitely think a
reorganization is in order.  I think matplotlib needs an general module,
perhaps plots, that contains sub-modules for different types of plots
(like bar plots), and those sub-modules contain functions, all of which
have an axes object as their first argument.  These could still be attached
to axes as methods at least as a transition, but it would leave the axes
class with methods that really have to do with axes, and not plotting per
se.  This would also make it possible to put code shared between plot types
with those plot types in their module.

On Thu, Oct 24, 2013 at 8:39 PM, Chris Barker chris.bar...@noaa.gov wrote:

 On Thu, Oct 24, 2013 at 8:29 AM, Michael Droettboom md...@stsci.edu
 wrote:
  Here are the notes with action items from the meeting:

 thanks for posting that. I see:

 pylab - should it stay or should it go?

 Comment from the peanut gallery:

 Go.

 But beyond that, matplotlib.pyplot is a big mess of both the
 matlab-style state-machine current figure, current axis stuff, and
 what you need to do (at least reasonably on the command line) OO
 interface.

 This makes it really hard to teach to newbies -- I just did this last
 night, and made a point to use tutorials that emphasize the OO
 interface (Thanks Ben Root, Katy Huff, and Antony Scopatz, and I'm
 sure others that helped put the materials together that I stole
 from...). However, there were still a number of examples in there that
 just called plot() or whatever, and even if there were not, the
 namespace is really cluttered with stuff!

 Anyone like the idea of an matplotlib.ooplot namespace that would have
 just what you need to use the oo style?

 -Chris

 --

 Christopher Barker, Ph.D.
 Oceanographer

 Emergency Response Division
 NOAA/NOS/ORR(206) 526-6959   voice
 7600 Sand Point Way NE   (206) 526-6329   fax
 Seattle, WA  98115   (206) 526-6317   main reception

 chris.bar...@noaa.gov


 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
 from
 the latest Intel processors and coprocessors. See abstracts and register 
 http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk
 ___
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Pull request

2013-10-25 Thread Todd
On Fri, Oct 25, 2013 at 3:06 PM, Pierre Haessig pierre.haes...@crans.orgwrote:

  Hi,

 Le 21/10/2013 15:58, Todd a écrit :

   2) Should there be two separate functions for these two, or just one

 function, with a switch argument `unwrap` ? (I guess it would be True by
 default)


  I originally was going to do that, but decided against it.  The problem
 is with specgram.  Here, I thought it would be needlessly complicated to
 add an unwrap parameter that is only useful for one mode.  To make it
 obvious to users, I wanted to keep specgram as similar as possible to the
 other plot types, and that involved keeping the parameter.

 Further, this approach is simpler to code and easier to maintain. Having
 to deal with the unwrap parameter would have been more difficult to
 program.  Dealing with both an unwrap parameter in some cases and a
 separate mode in others would have been even more complicated.

 Further, _spectral_helper and specgram already have a huge number of
 arguments.  This way I was able to get away with just adding one new
 argument rather than two.


 You've convinced me. I didn't have the big picture of your PR when writing
 my previous messages. I like the approach you took for specgram, which put
 magnitude, phase, angle on the same level. This indeed reduce the
 number of keywords.

 Coming back to the readability, what do you think of replacing phase,
 angle by unwrapped phase, phase. Beyond readability, it also
 emphasizes for the reader the idea of postprocessing to get the unwrapped
 phase, i.e. a something that can have it's issue.


 I considering that.  The problem is that people have to type all that.
magnitude_spectrum is long enough as it is, but
unwrapped_phase_spectrum is just a huge function name (24 characters).  I
wanted something more concise.  I think the documentation makes it clear
enough.  I don't think we lose that much, the users only have to read the
docstring once, and they will avoid a lot of annoyance typing out such a
huge function name over and over.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Pull request

2013-10-25 Thread Todd
On Fri, Oct 25, 2013 at 2:57 PM, Pierre Haessig pierre.haes...@crans.orgwrote:

  Hello,


 Now that that PR #2522 is merged, I don't know how much futher commenting
 is useful, but I think there are two API details that I feel could be
 better :

 1) API dissymetry

 The new pyplot/axes API is now:

  * 1 function *spectgram* now uses a mode argument to tune this behavior :

 *mode*: [ 'default' | 'psd' | 'magnitude' | 'angle' | 'phase' ]
  What sort of spectrum to use.  Default is 'psd'. which takes
  the power spectral density.  'complex' returns the
 complex-valued
  frequency spectrum.  'magnitude' returns the magnitude
 spectrum.
 'angle' returns the phase spectrum without unwrapping.  'phase'
  returns the phase spectrum with unwrapping.

 * 3 new functions *phase_spectrum, angle_spectrum, magnitude_spectrum*which 
 complement the exising psd/csd

 - I think this contributes to overcrowding axes/pyplot API. I like much
 better what is done with specgram so I would propose to add just one new
 function, for example *spectrum*(...mode='magnitude/angle/phase'). Using
 the same *mode *keyword as for specgram would increase the coherence of
 the API


Although it may reduce the number of functions, I don't think it increases
the coherence of the API.  Quite the opposite, in fact.  Besides the
inconsistency with psd and csd, I think having the plot types separate
makes sense because they really are not the same plots, they plot different
things in different ways and different units and using parameters.
Specgram, on the other hand, plots things in the same way with similar
units and mostly the same paramaters.  So I think specgram plots group
together much more cleanly than the other spectrum-related plots.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Pull request

2013-10-25 Thread Todd
On Fri, Oct 25, 2013 at 2:34 PM, Pierre Haessig pierre.haes...@crans.orgwrote:

  Hi,

 Le 22/10/2013 19:14, Todd a écrit :

  Thanks for the feedback. I agree that your documentation does make clear
 the distinction between phase and angle and that it has a consistency.
 I just feel that this distinction does not exist outside ...

 But beyond this question of phase vs. angle, I must say I don't see that
 big a use case for phase/angle spectrums[*] (as opposed to magnitude which
 are much used).


 I personally use phase and angle spectrums a huge amount.  In signal
 processing it is extremely important.  It is a critical component in
 acoustics.  It is also used a lot to separate out signals that have been
 mixed together.  Knowing the phases of signals can also be very important
 in certain optics applications and for radio signals and RADAR.  Changes in
 the phase spectrum over time (like you would get from a phase spectrogram)
 is important for doppler analysis both with optical and acoustic signals.

  Also, from an educational perspective, anyone taking a digital signal
 processing course will need to produce magnitude/phase plots, probably both
 with and without wrapping (since any decent digital signal processing
 course will teach you about the pitfalls that occur due to phase
 wrapping).  So this will make matplotlib much more useful for such courses.


 Also, in many cases, spectrum is synonymous with spectral density,
 which implies magnitude. In the end I wonder whether the notion of phase
 even makes sense for a spectrogram ?


  Yes, particularly electrical engineering.  But there are many other
 fields where spectral density is rarely used, and where more ordinary
 magnitude and phase plots are the norm, as I explained in the previous
 paragraphs.

 Thanks for dealing with my ignorance. It's true that I have a biased view
 on these frequency functions, because I mostly deal with random signals
 these days.

 In fact I'd like to understand a bit more how phase spectorgram works.
 Since the signal must be cut into chunks to make the plot along time, how
 is the phase computations synchronised, that is, how does it use a common
 time reference. (because I would imagine that otherwise the phase would
 make jumps between each window frame). Do you have a pointer for how this
 is solved ? (or is this problem just non-existing?).

 best,
 Pierre


This could certainly be an issue, and no it isn't dealt with (nor am I
aware of a way it could be dealt with).

There are really several different questions here.

First, is it worthwhile having 1-D phase and angle spectrums
(phase_spectrum and angle_spectrum).  I would argue that this is definitely
the case, as I already explained.

Second, is it worthwhile adding these to specgram?  Frankly. probably not.
They have some robustness issues.

Third, given that implementing phase_spectrum and angle_spectrum
automatically gets us phase and angle specgrams, and that it would actually
take more code to turn them off than to leave them in, is there any reason
to explicitly disable these plot type?  I would say no.  It is a tool.  It
may not be useful to very many people, and the people who do use it may
need to be careful to use it properly.  But since we get it for free
anyway, I don't see a good reason to put in the extra code to remove
functionality that may be useful to someone but hurts no one.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] matplotlib Hangout today at 14:00 UTC (10:00am ET)

2013-10-24 Thread Todd
Was anyone looking at the questions?  I posted a bunch of questions but
nobody seemed to notice them.


On Thu, Oct 24, 2013 at 3:41 PM, Michael Droettboom md...@stsci.edu wrote:

 Just a reminder, we are having a general matplotlib development hangout
 today.  Everyone that responded to the Doodle poll from a few weeks ago
 will get an invite, along with Matthew Terry and Matthew Brett if they
 can make it to discuss their work with testing and builds.

 We have a few extra spots, so let me know if you'd like an invite (first
 come, first served).

 I'll post a public URL to watch along once it begins as well.

 Mike

 --
 _
 |\/|o _|_  _. _ | | \.__  __|__|_|_  _  _ ._ _
 |  ||(_| |(_|(/_| |_/|(_)(/_|_ |_|_)(_)(_)| | |

 http://www.droettboom.com



 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
 from
 the latest Intel processors and coprocessors. See abstracts and register 
 http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk
 ___
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] matplotlib Hangout today at 14:00 UTC (10:00am ET)

2013-10-24 Thread Todd
Here are the questions I asked during the hangouts session (paraphrased):

-
Regarding continuous integration:

Has looked into OBS? (open build server, https://build.opensuse.org/)  It
can be installed on a local machine or server, supports automatically
creating and deleting fresh images with each build, and supposedly works
with osX as well as Linux although I haven't tested it (it does need a Mac
OsX VM).


-
Regarding bug handling:

It might be possible to do something with this with Google Code-in (
https://developers.google.com/open-source/gci/), although I am not 100%
sure this would be acceptable there.

Another possibility would be to allow volunteer triagers who may not be
developers but can at least handle basic stuff like finding duplicates and
following up with the reporters of old bugs.



-
Regarding embedding:

Perhaps there could be a generic figure widget for each backend.  The
widget would automatically handle all the backend-specific stuff necessary
to create a figure object and display it in the widget (including resizing
and such).  It would provide access to the low-level backend-specific parts
to make it possible to subclass it or change the details of how it works.
The figure windows would have this widget as their central widget, and
would probably access it using these low-level components.

However, for basic usage each widget would also have a figure attribute,
which would contain a single generic figure object.  Basic users who just
want to embed a regular plot could access that figure object and use it in
the normal way.

These could probably all be accessed from a single module, although they
probably would all live in their own backend-specific modules.

It wouldn't allow people to use pyplot, but if this was the documented way
to do embedding and the documentation made it clear you needed to use the
OO interface when embedding I think it would greatly reduce the amount of
trouble people have.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] Problem compiling master

2013-10-22 Thread Todd
As of last night, I can no longer compile master.  I get the following
error:

building 'matplotlib.ttconv' extension
creating build/temp.linux-x86_64-2.7/extern/ttconv
gcc -pthread -fno-strict-aliasing -fmessage-length=0 -O2 -Wall
-D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables
-fasynchronous-unwind-tables -g -DNDEBUG -fmessage-length=0 -O2 -Wall
-D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables
-fasynchronous-unwind-tables -g -fPIC
-DPY_ARRAY_UNIQUE_SYMBOL=MPL_matplotlib_ttconv_ARRAY_API
-DPYCXX_ISO_CPP_LIB=1
-I/usr/lib64/python2.7/site-packages/numpy/core/include
-I/usr/local/include -I/usr/include -I. -I/usr/include/python2.7 -c
src/_ttconv.cpp -o build/temp.linux-x86_64-2.7/src/_ttconv.o
src/_ttconv.cpp:12:27: fatal error: ttconv/pprdrv.h: No such file or
directory
compilation terminated.
error: command 'gcc' failed with exit status 1

This happens even when building from a newly-cloned directory.  I am
building on Linux (openSUSE 12.3).  There shouldn't be ttconv/pprdrv.h, it
has been moved to extern/ttconv/pprdrv.h.  I can't figure out why it is
still looking there.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Problem compiling master

2013-10-22 Thread Todd
On Tue, Oct 22, 2013 at 9:30 AM, Ian Thomas ianthoma...@gmail.com wrote:

 On 22 October 2013 07:53, Todd toddr...@gmail.com wrote:

 As of last night, I can no longer compile master.  I get the following
 error:

 building 'matplotlib.ttconv' extension
 creating build/temp.linux-x86_64-2.7/extern/ttconv
 gcc -pthread -fno-strict-aliasing -fmessage-length=0 -O2 -Wall
 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables
 -fasynchronous-unwind-tables -g -DNDEBUG -fmessage-length=0 -O2 -Wall
 -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables
 -fasynchronous-unwind-tables -g -fPIC
 -DPY_ARRAY_UNIQUE_SYMBOL=MPL_matplotlib_ttconv_ARRAY_API
 -DPYCXX_ISO_CPP_LIB=1
 -I/usr/lib64/python2.7/site-packages/numpy/core/include
 -I/usr/local/include -I/usr/include -I. -I/usr/include/python2.7 -c
 src/_ttconv.cpp -o build/temp.linux-x86_64-2.7/src/_ttconv.o
 src/_ttconv.cpp:12:27: fatal error: ttconv/pprdrv.h: No such file or
 directory
 compilation terminated.
 error: command 'gcc' failed with exit status 1

 This happens even when building from a newly-cloned directory.  I am
 building on Linux (openSUSE 12.3).  There shouldn't be ttconv/pprdrv.h, it
 has been moved to extern/ttconv/pprdrv.h.  I can't figure out why it is
 still looking there.


 Todd,

 This is my fault, I would expect to see a '-Iextern' in the compilation
 options.  Usually this is obtained from CXX().add_flags(), but obviously
 not in your case which implies that your CXX is available via pkg-config.

 I think either of the following changes will fix the problem:

 1) Either adding the following after line 947 in setupext.py:
ext.include_dirs.append('extern')

 2) Or changing line 12 of src/_ttconv.cpp from
 #include ttconv/pprdrv.h
 to
 #include extern/ttconv/pprdrv.h

 I'll need to think about which is the better solution.  If you can let me
 know which of these fix the problem, I'll have a PR out later today.

 Ian

 Thanks, both seem to work.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Pull request

2013-10-22 Thread Todd
On Sun, Oct 20, 2013 at 9:45 AM, Todd toddr...@gmail.com wrote:

 Hello,

 I submitted a pull request #2522 [1].  It includes support for more basic
 spectrum plots like magnitude and phase spectrums.  These are extremely
 commonly used in signal processing, acoustics, and many other fields, but
 are also very important for educational usage since pretty much anyone
 going through one of several engineering degrees like electrical
 engineering has to learn these types of plots.  I have heard a number of
 colleagues complaining about the lack of these plots in matlab.

 It has been up for 5 days, but I haven't received any comments on its
 content or structure.  I understand that it is a pretty substantial patch,
 but I think the features are very useful.

 I am also a bit concerned that patches covering the same code might be
 submitted and accepted while I am waiting for this, since such changes
 would be hard to merge into my branch.

 So does anyone have any thoughts on the patch?

 [1] https://github.com/matplotlib/matplotlib/pull/2522


I do have one question about my pull request.

Currently, both axes.psd and axes.csd return the same thing as mlab.psd and
mlab.csd, namely the spectrum and frequency points.  They do NOT return the
line object that was plotted.  This is different than specgram, which
returns the AxesImage object that was plotted in addition to the
mlab.specgram return values.

I think having access to the line object is important, so
axes.magnitude_spectrum, axes.angle_spectrum, and axes.phase_spectrum do
return the line object.  I know this is inconsistent, but I think it is
very important and would strongly objefct to removing this.

The question, then, is whether this would be a good opportunity to add the
line object to the returned values for axes.psd and axes.csd.  This would
be an API break, but would be very easy to fix, and it may be beneficial
enough to warrant it.  What does everyone think?
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Pull request

2013-10-21 Thread Todd
On Mon, Oct 21, 2013 at 3:13 PM, Pierre Haessig pierre.haes...@crans.orgwrote:

 Hi,

 Le 20/10/2013 09:45, Todd a écrit :
  I submitted a pull request #2522 [1].  It includes support for more
  basic spectrum plots like magnitude and phase spectrums.  These are
  extremely commonly used in signal processing, acoustics, and many
  other fields, but are also very important for educational usage since
  pretty much anyone going through one of several engineering degrees
  like electrical engineering has to learn these types of plots.  I have
  heard a number of colleagues complaining about the lack of these plots
  in matlab.

 Having specific signal processing functions is indeed important. I hust
 have a question about phase vs. angle spectrum. From browsing
 quickly through you doc, it seems that the difference is just about
 *unwrapping the phase*. If that's indeed the case, I've two
 questions/remarks:

 1) is the terminology phase vs. angle spectrum standardized ? I must
 say I've never heard of one meaning wrapped and the other unwrapped.
 I didn't find similar terms in Matlab docs, but I didn't search that
 thoroughly.


The angle function in numpy returns the wrapped angle, while the unwrap
function documentation talks about phase, so it is consistent with the
usage in numpy.   Further, in signal processing, phases can have any value,
while angle often refers to the angle between two lines, which must be
wrapped.

There may be some ambiguity, but I made sure to explain it in the
documentation and provide links between the two functions so people know
what they should do if they want to use the other approach.


 2) Should there be two separate functions for these two, or just one
 function, with a switch argument `unwrap` ? (I guess it would be True by
 default)


I originally was going to do that, but decided against it.  The problem is
with specgram.  Here, I thought it would be needlessly complicated to add
an unwrap parameter that is only useful for one mode.  To make it
obvious to users, I wanted to keep specgram as similar as possible to the
other plot types, and that involved keeping the parameter.

Further, this approach is simpler to code and easier to maintain. Having to
deal with the unwrap parameter would have been more difficult to
program.  Dealing with both an unwrap parameter in some cases and a
separate mode in others would have been even more complicated.

Further, _spectral_helper and specgram already have a huge number of
arguments.  This way I was able to get away with just adding one new
argument rather than two.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] ggplot for matplotlib

2013-10-21 Thread Todd
Seems like a lot of what they are doing could be upstreamed into
matplotlib.  Then they could just wrap it in their own ggplot syntax.  That
would improve matplotlib and simplify the maintainance for them.


On Mon, Oct 21, 2013 at 5:58 PM, Michael Droettboom md...@stsci.edu wrote:

  I just learned about this today, and thought I'd share.  It's an
 implementation of the ggplot interface on top of matplotlib:

 http://blog.yhathq.com/posts/ggplot-for-python.html

 --
_
 |\/|o _|_  _. _ | | \.__  __|__|_|_  _  _ ._ _
 |  ||(_| |(_|(/_| |_/|(_)(/_|_ |_|_)(_)(_)| | |
 http://www.droettboom.com



 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
 from
 the latest Intel processors and coprocessors. See abstracts and register 
 http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk
 ___
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Directories for C/C++ extensions

2013-10-21 Thread Todd
On Mon, Oct 21, 2013 at 7:36 PM, Chris Barker chris.bar...@noaa.gov wrote:

  To expand slightly, with the current situation the onus is on us to
 ensure
  that mpl builds OK and passes all of our tests with and without each of
 the
  external libraries.

 If you only have internal libs, then there is less to do -- it only
 need to work with the version you bundle. And making sure it works
 with any-old-version-that-may-not-exist-yet is a pretty formidable
 challenge!


We have sonums for this very reason.  And this could apply just as well to
python itself.  There is a reason not many distros ship SAGE packages.


  Linux distro packagers will choose to set up qhull as a
  required dependency for their mpl package, and once they have done this
 can
  simply delete our directory containing the qhull source code in their mpl
  source package,

 If they are going to insist on doing this, then, yes you should
 certainly do it this way.


Yes, they are.  This is the whole point of having packages in the first
place, as opposed to something like windows where every program just
bundles everything..


  we can all be confident that it will work correctly.

 only if you've  tested against the version (maybe patched) of the
 external lib they are using...


It is only matplotlib's responsibility to test against the unpatched
versions specified, just like it is only matplotlib's responsibility to
test against the unpatched python versions specified.  Doing this isn't a
particularly difficult task, there are easily tens of thousands of apps
that have no problem with this.


  If we always used our internal version then distro packagers would have
 to
  change our setup scripts to build using the external libraries.  This
 would
  be more time-consuming and error prone leading to less timely mpl distro
  releases.  We need to make their job as easy as possible.

 it's easiest for them if they don't try to pull out an included
 dependency -- but maybe you're right that that REALLY want to do that!


It would be easiest if matplotlib detected whether the library is present
at build-time.  That is what most packages do.


 The needs of the distro packagers, which are primarily security and
  stability, are sometimes at odds with the needs of scientific software,
  where the premium is on reproducibility.  The output of matplotlib
 depends
  on the versions of some of its dependencies, not the version of
 matplotlib
  alone, and that's problematic for some...

 exactly -- if we know exactly which version of a lib is in use, we
 know that it works the way we expect in the use cases we expect to use
 it in.

 But I'm not maintaining this code, so have at it in the way that makes
 sense to you.

 NOTE: it would be a different story if this were a netwroking protocol
 lib, or something where security patches would be critical. Maybe I'm
 naive, but this doesn't seem likely in this case.


You would be surprised what sort of packages can lead to security
vulnerabilities.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135991iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] Pull request

2013-10-20 Thread Todd
Hello,

I submitted a pull request #2522 [1].  It includes support for more basic
spectrum plots like magnitude and phase spectrums.  These are extremely
commonly used in signal processing, acoustics, and many other fields, but
are also very important for educational usage since pretty much anyone
going through one of several engineering degrees like electrical
engineering has to learn these types of plots.  I have heard a number of
colleagues complaining about the lack of these plots in matlab.

It has been up for 5 days, but I haven't received any comments on its
content or structure.  I understand that it is a pretty substantial patch,
but I think the features are very useful.

I am also a bit concerned that patches covering the same code might be
submitted and accepted while I am waiting for this, since such changes
would be hard to merge into my branch.

So does anyone have any thoughts on the patch?

[1] https://github.com/matplotlib/matplotlib/pull/2522
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Directories for C/C++ extensions

2013-10-18 Thread Todd
On Oct 18, 2013 8:20 PM, Chris Barker chris.bar...@noaa.gov wrote:

 Ian,

  I am working on a PR to replace the use of matplotlib.delaunay with the
  Qhull library.

 nice! -- ( though I sure wish Qhull did constrained delaunay...)

  Installation will be similar to the existing packages LibAgg
  and CXX in that if the system already has a sufficiently recent version
of
  Qhull installed then matplotlib will use that, otherwise it will build
the
  required library from the source code shipped with matplotlib.

 Why bother, why not just always build the internal version?

 (for that matter, same with agg)

 Wouldn't it be a lot easier and more robust to be sure that everyone
 is running the exact same code?

 What are the odds that folks are using qhull for something else, and
 even more to the point, what are the odds that the duplication of this
 lib would matter one wit?

 This isn't like LAPACK, where folks have a compellling reason to run a
 particular version.

 -- just my thoughts on how to keep things simpler.


 -Chris

From a Linux distro packaging perspective bundled external libs are a big
no-no. If a patch is needed for whatever reason packagers don't want to
have to go and hunt down dozens of copies of the same library.  In some
cases there is no alternative but it should be avoided whenever possible.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60135031iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] New tests failing when run together

2013-10-10 Thread Todd
I have been implementing some new plot types, with tests.  This code passes
all existing tests.  I have also expanded the tests on some existing plot
types and mlab functions.  These tests run fine on their own.

The problem is that, when I run the code with the new tests, I get a lot of
out of memory errors.  Further, the errors do not occur in the new tests,
but rather in other, unrelated tests.  Further, the tests that fail work
fine when run on their own, they only fail when run as part of the complete
test suite.

Even stranger, when I run the tests in parallel (even with only one
process) and enable --process-restartworker, the tests run fine (with a
large enough timeout).  But --process-restartworker doesn't help if
parallel tests are not turned on.

So I am not sure exactly what to do here.  Even if I leave out my own
tests, I may be running into some limit or memory leak that may very well
result in problems for other people down the road.

A solution might be to force tests to run in parallel with
--process-restartworker, but of course it would be better to find out
where the leak is.
--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60134071iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New tests failing when run together

2013-10-10 Thread Todd
The branch is matplotlib/toddrjen spectral:

https://github.com/toddrjen/matplotlib/tree/spectral

Specifically the tests that are causing the problem are in test_mlab.py.  I
tried reorganizing the tests into subclasses and implementing a cleanup
class (that is the current HEAD), but the problem exists even without that
commit.  You can cherry-pick 50c90102a929af5d534e551fd624abffeb9470b8 and
7c1b4db8b2d04826e267781c0de1bcc622f0fdb5.


On Thu, Oct 10, 2013 at 3:22 PM, Michael Droettboom md...@stsci.edu wrote:

  Are your tests including the @cleanup decorator?  (The @cleanup
 decorator is run implicitly with the @image_comparison decorator, so you
 really only need one or the other).

 Beyond that wild guess, I'm not sure what could be going on.  You could
 file a pull request with your new code, even if it's not fully ready, so we
 could try it out and poke at it.  Or just point us to your git branch so we
 could check it out.

 Mike


 On 10/10/2013 07:33 AM, Todd wrote:

   I have been implementing some new plot types, with tests.  This code
 passes all existing tests.  I have also expanded the tests on some existing
 plot types and mlab functions.  These tests run fine on their own.

  The problem is that, when I run the code with the new tests, I get a lot
 of out of memory errors.  Further, the errors do not occur in the new
 tests, but rather in other, unrelated tests.  Further, the tests that fail
 work fine when run on their own, they only fail when run as part of the
 complete test suite.

  Even stranger, when I run the tests in parallel (even with only one
 process) and enable --process-restartworker, the tests run fine (with a
 large enough timeout).  But --process-restartworker doesn't help if
 parallel tests are not turned on.

  So I am not sure exactly what to do here.  Even if I leave out my own
 tests, I may be running into some limit or memory leak that may very well
 result in problems for other people down the road.

  A solution might be to force tests to run in parallel with
 --process-restartworker, but of course it would be better to find out
 where the leak is.


 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
 the latest Intel processors and coprocessors. See abstracts and register 
 http://pubads.g.doubleclick.net/gampad/clk?id=60134071iu=/4140/ostg.clktrk



 ___
 Matplotlib-devel mailing 
 listMatplotlib-devel@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/matplotlib-devel



 --
_
 |\/|o _|_  _. _ | | \.__  __|__|_|_  _  _ ._ _
 |  ||(_| |(_|(/_| |_/|(_)(/_|_ |_|_)(_)(_)| | |
 http://www.droettboom.com



 --
 October Webinars: Code for Performance
 Free Intel webinars can help you accelerate application performance.
 Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most
 from
 the latest Intel processors and coprocessors. See abstracts and register 
 http://pubads.g.doubleclick.net/gampad/clk?id=60134071iu=/4140/ostg.clktrk
 ___
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


--
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register 
http://pubads.g.doubleclick.net/gampad/clk?id=60134071iu=/4140/ostg.clktrk___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] RFC: Moving plots out of axes

2013-03-15 Thread Todd
Currently, many of the plot types reside in axes.  This makes sense from a
structural standpoint, since the plots are generally a part of an axes.
However, it makes things more difficult from a practical standpoint.
First, it means that the axes class is huge, with both core axes-related
methods and plotting-related methods.  Second, it means that boilerplate.py
has to be told explicitly which methods to use, rather than just grabbing
everything from a module.  Third, it makes it impossible to break the plot
types into smaller groups of related plots.

The solution, I think, is to move the plots into one or more modules and
implement them as functions.  They would have the same call signature as
now, we would just replace self with ax or something like that.  This
would allow you to, theoretically, import and call them without axes, but
this would probably not be common.

Within the axes constructor, the constructor would run through each of
these modules and store them as attributes with the same name as the
function and the function itself being the contents.  At least if me
understanding is correct, this would make them behave as methods (since
they are already set up to take an axes instance as their first argument).

The axes would just be left with the methods related to manipulating the
axes themselves.

This would also simplify boilerplate.py, since it would simply need to know
the names of the modules rather than the name of every plot type.  It would
then just run through the functions in the modules (or even just run
through all modules in a particular directory).  We would probably even be
able to do away with that portion of boilerplate.py completely, creating
the plotting functions in on-the-fly in pyplot at runtime, but that is a
separate issue.

What does everyone think of this approach?
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] my $0.02 on MEP13

2013-02-09 Thread Todd
On Feb 8, 2013 11:14 PM, Benjamin Root ben.r...@ou.edu wrote:

 Just a crazy thought, but why are we trying to treat title and such as
properties?  When I think of properties for matplotlib, I think of
edgecolors, fontsize, and linestyles.  Why don't we solve that problem
first?

In my mind there are several reasons.
First, I personally see things like title as properties as well. I can
see why not everyone would, but that would seem to me a reason to keep the
setter functions at least in some cases rather than a reason to not
implement properties.

Second, it is more consistent. Users wouldn't need to remember on a
case-by-basis whether to use a setter or a property.

Third, it would require making sure the API is clan and consistent behind
the scenes.  The more complex setters like title would just be wrappers
around the properties or property functions, so there would need to be ways
to access the individual arguments on their own.

That being said, it would be possible to implement properties in stages,
with simpler ones done first and more complex ones done later.

However, there are three reasons I did not include this in my proposed
plan. First, it would mean we lose consistency, perhaps for a few releases.
Second, it could lead to the API breakage being split over several releases
rather than happening all at once. Third, if we do the behind-the-scenes
cleanups first then this isn't an issue to begin with since complexities
will already be dealt with.
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] my $0.02 on MEP13

2013-02-08 Thread Todd
On Fri, Feb 8, 2013 at 3:38 AM, Jason Grout jason-s...@creativetrax.comwrote:

 On 2/7/13 8:08 PM, Erik Bray wrote:
  A couple easier solutions: Allow
  the `.title` (and other such attributes) to be assigned to with a
  (value, options) tuple where the value is the title itself, and the
  options is a dictionary or tuple of supported options for the title.

 Interesting.  Just brainstorming here...then

 ax.title += (None, moreoptions)

 could set more options (without changing the title text or already set
 options), or

 ax.title -= (None, deleteoptions)

 could reset just certain options to default values.

 Thanks,

 Jason


I am not a fan of this approach.  It seems to be trying to force a property
to behave like a function when it isn't meant to behave like a function.
In my mind a property is just that, a single aspect of an object.   If you
want to change another aspect, you need to change another property.  So
these moreoptions need to have their own properties, either in the axes
object or, better yet, since they are properties of the title text, have
them as properties of a text object.
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] my $0.02 on MEP13

2013-02-08 Thread Todd
On Fri, Feb 8, 2013 at 2:40 AM, Antony Lee antony@berkeley.edu wrote:

 Hi,

 I saw that a discussion started on transitioning to the use of properties
 instead of explicit getters and setters, which seems like a very good idea
 to me... so I thought this would be a good idea to get involved in
 matplotlib-devel :)

 Right now an issue raised is what to do with set_* that take multiple
 arguments.  Taking set_title, which takes both positional and keyword
 arguments, as an example, my idea would be to do

 ax.title = A title
 ax.title.fontdict = fontdict

 Basically, a property foo (in the matplotlib meaning of the word)
 becomes a descriptor with __get__ = get_foo and __set__ = set_foo, and
 keyword arguments to the old property setter become themselves descriptors
 on that descriptor.

 Antony


I think this makes it over-complicated.  It is much simpler, more explicit,
and more consistent to have two properties here, one that only deals with a
string, and a second that only deals with a text object.  Then you can do
something like (where titletext returns the text object):

ax.titletext.fontdict

That way we automatically get what you want without any additional work or
fancy tricks in a much cleaner, more explicit, and more predictable manner.
--
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] Getting pull requests merged

2013-02-01 Thread Todd
Is there a process that someone needs to go through to get a pull request
merged into master?
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] MEP13 - python containers

2013-01-17 Thread Todd
On Thu, Jan 17, 2013 at 10:43 AM, Phil Elson pelson@gmail.com wrote:

 Hi Todd,

 I agree with the principle of properties - it will make much of the mpl
 codebase (and user code) more pythonic, so thanks for proposing this.

 Would you be able to give an example of how you propose setters such as
 Axes.set_xlim might make use of properties. The particular example I have
 picked uses keywords to determine the behaviours of the method itself:

 def set_xlim(self, left=None, right=None, emit=True, auto=False, **kw):
 ...


 For me, the backwards compatibility issue is the key blocker to this MEP.
 Would you mind providing some concrete examples (perhaps using the set_xlim
 method as a focus point)?

 Cheers,

 Phil


Methods like that will be a problem.  I see two possible approaches (which
are not mutually exclusive):

1. keep the set_xlim method for more sophisticated cases.
2. split the set_xlim method into several methods

Frankly I am not sure deprecating the existing setter and getter methods is
really called for.  It may not be worth the trouble for users.  That is why
I said everything in the MEP is very tentative.

For approach 1, we would keep the current method, but also have another
method:

@xlim.setter
def xlim(self, lims):
...

so for the basic case, just setting the lims, you would do:

axesobj.xlims = (leftval, rightval)

For approach 2, you would have additionally have (there is already an
autoscale_x_on method):

@autoscale_x.setter
def autoscale_x(self, auto):
...


@emit_xlim.setter
def emit_xlim(self, emit):
...


@xlim_left.setter
def xlim_left(self, left):
...


@xlim_right.setter
def xlim_right(self, rigth):
...

(or you could do some python-fu to allow you to assign values to the
xlim[0] and xlim[1])

This would require setting three separate attributes.  However, we would
already have the autoscale_x property.

In my opinion breaking up the API into separate calls would be a cleaner
approach anyway.  Setters and getters should be setters and getters, they
shouldn't be modifying other unrelated values.  But that does not mean we
have to remove the existing approach.
--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122712___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Usefulness of Travis-CI

2013-01-16 Thread Todd
On Jan 16, 2013 9:30 AM, Fernando Perez fperez@gmail.com wrote:

 On Wed, Jan 16, 2013 at 12:10 AM, Nelle Varoquaux
 nelle.varoqu...@gmail.com wrote:

  Last but not least, maybe we can see what numfocus has to offer.

 Absolutely!  I'll be offline for two weeks, but others on the list can
 certainly propose this to numfocus on the list and we can look into
 what can be done, esp. in a way that could also help other projects as
 well.

 Also, there's snakebite: http://www.snakebite.net.  The project seemed
 very dormant for a long time, but there's been some activity since:
 http://www.snakebite.net/network.  I'd ping Titus Brown on Twitter
 (@ctitusbrown) for info...

 Cheers,

There is also the open build service, which is more of a build farm but can
be set up pull, build, test, and publish git snapshots for most common
Linux distributions to your own online software repository simultaneously
with one click on a website or one commandline call.

https://build.opensuse.org/

They provide hosting, building, and distribution for free.  You can
probably set up a script to automatically rebuild master on a change, or
daily.  However, setting it up to test individual commits would be overly
difficult and probably be seen as an abuse of the system.  Using it to
always build, test, and release offer the latest master to most linux
distros, on the other hand, would be fine.  If someone contacts them they
can probably set up a repository just for you, or if this sort of thing is
useful a more general repository you can share with others (there is
already devel:languages:python, maybe devel:languages:python:unstable).

You can also use it to build release rpms and debs for various distros.  It
is already being used to build the packages discussed so far for openSUSE,
but if someone is willing to maintain them they can be built for other
distros as well.
--
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 ___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] Matplotlib property support

2013-01-16 Thread Todd
Currently matplotlib uses set_ and get_ functions for reading and writing
values.  However, since 2.6 python supports properties, which allow access
to such values as attributes in addition to using the functions directly.
Would it be worthwhile implementing property support in matplotlib?
--
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 ___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Matplotlib property support

2013-01-16 Thread Todd
On Wed, Jan 16, 2013 at 2:55 PM, Benjamin Root ben.r...@ou.edu wrote:


 On Wed, Jan 16, 2013 at 2:42 PM, Todd toddr...@gmail.com wrote:

 Currently matplotlib uses set_ and get_ functions for reading and writing
 values.  However, since 2.6 python supports properties, which allow access
 to such values as attributes in addition to using the functions directly.
 Would it be worthwhile implementing property support in matplotlib?


 This was actually discussed during a Birds of a Feather (BOF) meeting back
 in SciPy2012 (which John Hunter attended).  I am definitely for the idea,
 but it is going to be a very painful and long deprecation process.

 Is there a reason we have to deprecate the current method?   They are not
mutually-exclusive.
--
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 ___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] MEP13 - python containers

2013-01-16 Thread Todd
I have created a very preliminary MEP for the possible move to properties:

https://github.com/matplotlib/matplotlib/wiki/MEP13

Please take a look at it and discuss.  As I said, this is very
preliminary.  Everything is subject to change.
--
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 ___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Matplotlib property support

2013-01-16 Thread Todd
On Wed, Jan 16, 2013 at 2:52 PM, Michael Droettboom md...@stsci.edu wrote:

  This seems like a good candidate for a MEP.  We'd want to take a
 graceful approach to transitioning to properties.

 See here for information about MEPs:

 https://github.com/matplotlib/matplotlib/wiki

 Mike




I have created a MEP on the subject, MEP13, and a new mailing list thread
to discuss it.
--
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 ___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New plot type idea -- EventRaster

2013-01-14 Thread Todd
On Mon, Jan 14, 2013 at 1:28 AM, Todd toddr...@gmail.com wrote:

 On Mon, Nov 12, 2012 at 6:35 PM, Damon McDougall 
 damon.mcdoug...@gmail.com wrote:

 On Mon, Nov 12, 2012 at 2:17 PM, Paul Ivanov pivanov...@gmail.com
 wrote:
  On Mon, Nov 12, 2012 at 7:36 AM, Michael Droettboom md...@stsci.edu
 wrote:
  On 11/11/2012 11:51 PM, Todd wrote:
  Now that 1.2 is out, can we revisit this?  I would like to get it
  implemented for the next feature release.
 
 
  Absolutely.  I think the next step, once you have an implementation,
  would be to submit a pull request and we can all help with a review.
 
  This hasn't been mentioned yet, but Todd will hopefully find our
  developer docs useful:
  http://matplotlib.org/devel/index.html
 
  In particular, there's a section on writing a new pyplot function:
 
 http://matplotlib.org/devel/coding_guide.html#writing-a-new-pyplot-function

 Thanks for that, Paul.

 Todd, there's also a section on writing tests for matplotlib on the
 page Paul pointed out. For a new feature there should be a couple of
 tests to go with it to make sure everything passes sanity checks.

 Thanks for spending your time contributing!



 I have completed the plot type, including unit tests and examples (I am
 not an artist so someone else can probably make the examples prettier).
 I've confirmed pep8 compliance and run the code through pyflakes and pylint
 in addition to the unit tests.

 It is divided into two parts: an EventCollection class, which is a
 subclass of LineCollection in collections.py, and an eventplot method in
 axes.py (and pyplot, through boilerplate.py) which returns a list of
 EventCollection objects.

 I am ready to submit a git pull request now.  However, it depends on
 another git pull request I submitted, titled add get_segments method to
 collections.LineCollectionhttps://github.com/matplotlib/matplotlib/pull/1655.
 I can confirm the changes in this pull request work properly, I have been
 using the new method extensively in my new plot type.

 Would it be possible to get this accepted so I can submit the new plot
 type for review?  I am sure there will be lots of changes and cleanups that
 will be required before the new plots can be accepted, while the
 get_segments method is a relatively minor and non-intrusive change.

 If you wish to look at the code before the pull request it is in the
 toddrjen/matplotlib github fork, in the eventplot branch.  The main changes
 are to collections.py and axes.py.  The tests are in test_axes.py and a new
 test file test_collections.py. The examples are in eventcollection_demo.py
 and eventplot_demo.py

 Thanks a lot for your time.


Thanks for getting get_segments in so quickly.

The pull request has been submitted, see Add EventCollection and
eventplothttps://github.com/matplotlib/matplotlib/pull/1657

--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122412___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New plot type idea -- EventRaster

2013-01-13 Thread Todd
On Mon, Nov 12, 2012 at 6:35 PM, Damon McDougall
damon.mcdoug...@gmail.comwrote:

 On Mon, Nov 12, 2012 at 2:17 PM, Paul Ivanov pivanov...@gmail.com wrote:
  On Mon, Nov 12, 2012 at 7:36 AM, Michael Droettboom md...@stsci.edu
 wrote:
  On 11/11/2012 11:51 PM, Todd wrote:
  Now that 1.2 is out, can we revisit this?  I would like to get it
  implemented for the next feature release.
 
 
  Absolutely.  I think the next step, once you have an implementation,
  would be to submit a pull request and we can all help with a review.
 
  This hasn't been mentioned yet, but Todd will hopefully find our
  developer docs useful:
  http://matplotlib.org/devel/index.html
 
  In particular, there's a section on writing a new pyplot function:
 
 http://matplotlib.org/devel/coding_guide.html#writing-a-new-pyplot-function

 Thanks for that, Paul.

 Todd, there's also a section on writing tests for matplotlib on the
 page Paul pointed out. For a new feature there should be a couple of
 tests to go with it to make sure everything passes sanity checks.

 Thanks for spending your time contributing!



I have completed the plot type, including unit tests and examples (I am not
an artist so someone else can probably make the examples prettier).  I've
confirmed pep8 compliance and run the code through pyflakes and pylint in
addition to the unit tests.

It is divided into two parts: an EventCollection class, which is a subclass
of LineCollection in collections.py, and an eventplot method in axes.py
(and pyplot, through boilerplate.py) which returns a list of
EventCollection objects.

I am ready to submit a git pull request now.  However, it depends on
another git pull request I submitted, titled add get_segments method to
collections.LineCollectionhttps://github.com/matplotlib/matplotlib/pull/1655.
I can confirm the changes in this pull request work properly, I have been
using the new method extensively in my new plot type.

Would it be possible to get this accepted so I can submit the new plot type
for review?  I am sure there will be lots of changes and cleanups that will
be required before the new plots can be accepted, while the get_segments
method is a relatively minor and non-intrusive change.

If you wish to look at the code before the pull request it is in the
toddrjen/matplotlib github fork, in the eventplot branch.  The main changes
are to collections.py and axes.py.  The tests are in test_axes.py and a new
test file test_collections.py. The examples are in eventcollection_demo.py
and eventplot_demo.py

Thanks a lot for your time.
--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122412___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Github Downloads going away...

2012-12-16 Thread Todd
On Sun, Dec 16, 2012 at 8:21 PM, Damon McDougall
damon.mcdoug...@gmail.comwrote:

 On Sat, Dec 15, 2012 at 8:25 PM, Jason Grout
 jason-s...@creativetrax.com wrote:
  On 12/14/12 10:55 AM, Nathaniel Smith wrote:
  sourceforge's horror of an interface.
 
  I'll second that.  Every time I go to Sourceforge, I have to figure out
  how in the world to download what I want (and I have to figure out which
  things *not* to click on too).

 Ok sounds like there is a reasonable amount of resistance towards
 Sourceforge.

 Eric, when you suggest that NumFocus could 'provide hosting directly',
 do you mean they would have the physical hardware to host the files,
 or are you suggesting they provide the finances to seek hosting
 elsewhere?

 In the GitHub blog post, they suggest using S3. We could try that.
 It's fairly inexpensive and the first year is free (within monthly
 bandwidth limits). We could try it for a year and see how that pans
 out? I'm not entirely sure how the Amazon stuff works but I've heard
 good things about it.


 Are you sure the monthly bandwidth limits are sufficient?

Also, have you talked to the pypi people about making exceptions for really
popular projects?  If critical packages like numpy, scipy, and matplotlib
cannot use pypi, that seems like a major failing of the system.
--
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Github Downloads going away...

2012-12-14 Thread Todd
On Dec 14, 2012 5:59 PM, Michael Droettboom md...@stsci.edu wrote:

 Github has removed the ability to host binaries.  They've removed this
feature without any apparent notification except on their blog saying it's
gone today.  And the suggested alternative is to use paid services.

 https://github.com/blog/1302-goodbye-uploads

 I had planned to complete our set of 1.2.0 binaries with a Python 3.2
from Russell Owen in the near future.  So much for that.

 Any thoughts?  Do we go back to Sourceforge for our download hosting?  Is
anyone familiar with any other services?  Do we try to piggy-back on what
other scipy projects are doing?

 Mike


Is there a reason pypi is not usable?


--
 LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
 Remotely access PCs and mobile devices and provide instant support
 Improve your efficiency, and focus on delivering more value-add services
 Discover what IT Professionals Know. Rescue delivers
 http://p.sf.net/sfu/logmein_12329d2d
 ___
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

--
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-11-11 Thread Todd
On Thu, Sep 27, 2012 at 8:18 PM, Todd toddr...@gmail.com wrote:
 On Thu, Sep 27, 2012 at 1:44 PM, Todd toddr...@gmail.com wrote:
 On Thu, Sep 27, 2012 at 1:12 PM, Damon McDougall
 damon.mcdoug...@gmail.com wrote:
 Hi Todd,

 Firstly, thanks for taking the time to crystallise your thoughts in
 words first. This is one of my bad habits; I tend to rush into things.

 I have some feedback for you, hopefully we can all work together to
 get this right. It's difficult when something new gets implemented and
 someone expects it to do something and the only way to resolve it is
 to break the calling API.

 Where is API broken?

 Anyway, I hope you'll find my comments
 helpful at the least. I also encourage others to weigh in with
 opinions and ideas.

 Okay, I will discuss the rationale.  I will snip out anything you
 agree on for brevity.

 Assuming we go with the name, here is my proposed call signature:

 EventRaster(x, offset=0, height=1, **kargs)

 CamelCase is discouraged for method names. Perhaps 'eventraster'?

 Fair enough.

 Also, we could also let **kwargs swallow the 'offset' and 'height'
 keyword arguments. Then the user isn't constrained by which order to
 put them in. The downside of this approach is that introspection is
 more difficult.

 I don't understand the advantage of this approach.  If you use keyword
 arguments, then the order doesn't matter.  So with the approach above
 you can use keyword arguments, in which case you can use whatever
 order they want, or you can use positional arguments.  On the other
 hand putting it in **kwargs, we lose the ability to use positional
 arguments.  So we lose nothing by allowing both positional and keyword
 arguments.  It is also easier to implement.

 offset determines the positions of the rows.  By default, the first
 row is placed with the line center y=0, and subsequent rows are placed
 with the line centers at increasing 1-unit increments.  If offset is
 defined and is a scalar, the first row is placed at the offset, and
 subsequent rows are placed at increasing 1-unit increments.  If offset
 is an array, it must be a 1D array of the same length as the second
 dimension of x.  In this case each element in offset determines the
 center of the corresponding row in the plot.

 How about letting offset be either: a) a scalar, determining the
 offset of all rows equally; or b) an array, determining the offset of
 each row individually.

 Because people are almost never going to want to have all the lines
 stacked right on top of each other.  The plot would be indecipherable
 that way.  The defaults are chosen to handle the most common use-cases
 most easily.

 In fact, why plot each row at integer y
 coordinates? Could we allow for an optional y-coordinate array, each
 element of which would be the y-coordinate at which to plot a row of
 lines. Then you wouldn't need offset.

 That is exactly what offset does if you pass an array.

 If this is going to be used to implement rug plots, it would need some
 way to handle columns of horizontal lines in addition to rows of
 vertical lines.  I see two ways to implement this.  First is to have
 to plot types, perhaps HEventRaster and VEventRaster.  The first would
 be as described above, while the second would be similar but
 everything rotated 90 degrees.  Another possibility is to change the
 call signature to this:

 EventRaster(x, y=None, offset=0, height=1, **kargs)

 I think accepting an 'orientation' kwarg, which can take either
 'horizontal' or 'vertical', determining the orientation of the lines
 and reversing the roles of the x and y arrays.

 That would work as well.  Probably cleaner that way

 The function will return a list of a new collection type I am
 tentatively calling EventCollection.  My thinking would be this would
 be a subclass of a new collection type called GenericLineCollection,
 which the current LineCollection would also subclass.  They would
 share things like the color handling and segment handling, however the
 segment handling will be a private method that LineCollection will
 have a public wrapper for.  On the other hand methods to set or add
 segments will remain private in EventCollection, although there will
 be a method to return the segments if an artist really wants to
 manipulate individual segments.

 Why can't we just use LineCollection? I don't see a good reason to
 create a new collection class here; the plot is simple.

 Explained below.

 The reason for doing it this way is that manipulating individual rows
 of events should be very common, such as changing their position,
 color, marker, width, and so on.  On the other hand manipulating lines
 individually should not be as common, although still supported.

 Fair enough, then maybe a better idea is to create your own
 EventRaster class (note camel case) to hold all the relevant data in
 arrays. Then make a 'construct_raster' method could return a
 LineCollection. Then again, weren't you passing extra kwargs

[matplotlib-devel] 1.3+ Release schedule (was: strategy for 1.2.x, master, PEP8 changes)

2012-10-15 Thread Todd
On Mon, Oct 15, 2012 at 2:11 PM, Phil Elson pelson@gmail.com wrote:
 if we leave PEP8 out of v1.2.x, and decide that once it is released,
 v1.2.x will be changed
 only if critical bugs are found, requiring a v1.2.1 release

 I agree. I think it is important here to be very clear about what
 constitutes a critical bug. In my opinion, releasing a v1.2.1 would be a
 very last resort and I would sooner see us move forward by fixing bugs in a
 new feature release (1.3). In order to do this we should have a schedule for
 our next release *now*, and ideally it shouldn't be that far away (i.e. no
 longer than 8-9 months). Some of my reasons for this assertion include:

 We have an amazing community of people who help us build our release bundles
 - so the actual release deployment mechanisms are no longer a limiting
 factor
 We have a long period between identification of features, their
 implementation and then seeing those features available in the latest
 release to our users. I would love to see that time shorten to share some of
 the cool new features that are being developed with non-developers sooner so
 that we can get feedback and go through the development cycle quicker.
 Currently making a release is a massive task which takes many developers out
 of actually being able to focus on new features or bugfixes. Having a
 quicker release cycle should mean we have fewer large changes per release
 and reduce the need we currently have to squeeze as much as we can into the
 next release - ultimately I think it will mean that we need to expend fewer
 developer hours focused on release management and last minute code
 reviewing.

  [snip]

 Phil

Why 8 to 9 months? This still seems like a very long time for a
project of this size. Much larger and more complicated projects
(gnome, KDE, Ubuntu) manage a 6 month release cycle, and for projects
this size I follow 2 to 3 months seems more typical. It's there a
reason the release cycle needs to be so long?

With a few month release schedule you can probably manage just 2 betas
and an rc, judging by other projects.

Also, have you considered a master is always stable approach, where
branches are only merged when they are complete? This could make
arbitrary release points much easier.

So basically, rather than waiting until you have a lot done for a new
release, you could have an approach more like Firefox now where each
release just had a couple new features, or maybe even just one big
feature.  Then a very quick beta cycle, and bugfix releases when
needed, but with that quick of a release cycle bugfix releases should
not be as important as they are now.  Other features would be worked
on in parallel in their own branch, ignoring the release entirely.

--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] PyGTK vs PyGObject

2012-10-05 Thread todd rme
I am trying to do some experimental packages with python 3 and the
latest RC, and I am trying to figure out the situation with some of
the backends.  Some are obvious, like wxwidgets and PyQt (Qt3
version).

The issue I am running into is with the gtk backend  PyGTK is
deprecated.  According to the website, all development halted a year
and a half ago and they say to use PyGObject instead.  PyGTK, as far
as I can tell, does not support Python 3 or GTK 3.  PyGObject,
however, supports both.  So I was wondering what I should be doing
with this backend.  Does matplotlib support PyGObject, or should the
GTK backends just be disabled on Python 3 builds?

Thanks for your help.

-Todd

--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] MEP11: Attempting to deal with the Python library dependency issue

2012-10-04 Thread todd rme
On Wed, Oct 3, 2012 at 6:20 PM, Michael Droettboom md...@stsci.edu wrote:
 I invite comments for a new MEP about improving the situation with respect
 to our bundling of third-party Python dependencies.

 In particular, I'd love feedback from the various stakeholders -- those
 producing binary installers and packages for the various platforms.

 https://github.com/matplotlib/matplotlib/wiki/MEP11

 Mike

I help with the openSUSE packaging of mpl.  At least as openSUSE
policies go, bundling dependencies is considered a big no-no.  RPM has
its own dependency handling, so as long as the dependencies are
documented (ideally with version numbers) then there is no issue,
either at build-time or at run-time.  I think that would likely be the
case for any official linux packages.

Anyone on Linux who is trying to install matplotlib from source should
be prepared to handle dependency resolution manually.  If they aren't,
then they shouldn't be messing with package installation in the first
place.  I think the documentation should clearly state this, although
more diplomatically of course :)

So from a Linux standpoint I think bundling is a bad idea.  Further,
any solution should be prepared to handle the situation where the
dependencies are already available, and not try to download them under
this situation.  It should also be able to handle installation with no
internet connection as long as the dependencies are available, so it
can be compatible with automated build systems and hpc environments
which may not support internet access for security reasons.

For windows, rather than creating independent matplotlib installers,
can't the documentation just point people in the direction of a
pre-existing bundle like python(x,y)?  Since there are groups
dedicated to making it easy to install python packages on windows, I
don't see the point of going through all the trouble of making your
own version.  If you really wanted to you might even be able to use
their sources to create your own variant that just installs what you
need.

-Todd

--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-09-27 Thread Todd
On Wed, Sep 26, 2012 at 3:14 PM, Michael Droettboom md...@stsci.edu wrote:
 On 09/26/2012 04:35 AM, Todd wrote:

 On Mon, Sep 24, 2012 at 3:33 PM, Todd toddr...@gmail.com wrote:

 I would like to add a new plot type to matplotlib.  Of course I am willing
 to implement it myself, but I want to confirm that it is acceptable and iron
 out the implementation details and API first so there are no major surprises
 when I submit it.

 I tentatively am calling the plot type an EventRaster plot (name
 suggestions, along with any other suggestions, are welcome).  The plot is
 made up if horizontal rows of identical vertical lines and/or markers.  Each
 line or marker represents a discrete event, and each row represents a single
 sequence of events (such as a trial).  The x-axis position of the line or
 marker identifies the location of the event by some measure.  An example of
 what such a plot often looks like is below.

 http://hebb.mit.edu/courses/9.29/2003/athena/dylanh/quad-rast.gif

 This sort of plot is used ubiquitously in neuroscience.  It is used to
 show the time of discrete neural (brain cell) events (called spikes) over
 time in repeated trials, and is generally called a spike raster, raster
 plot, or raster graph.  However, it can be used in any situation where you
 are only concerned with the position of events but not their amplitude,
 especially if you want to look for patterns in those events or look for
 differences between multiple sequences of events.

 Plotting the timing of events is an obvious use case, such as photons
 hitting photodetectors, radioactive decay events, arrival of patients to
 hospitals, calls to hotlines, or car accidents in cities.  However, the
 events do not have to be relative to time.  It could be position, for
 example, such as tree rings along bore holes, road crossings along railroad
 tracks, layers in sediment cores, or particular sequences along a DNA
 strands.

 I'll cover possible implementation details in the next email if everyone
 thinks this is a good idea.


 So does anyone think this would be a useful plot type?  If so I can explain
 how I plan to implement it and we can discuss changes or improvements to
 that.


 Sorry to not get back to you sooner -- a number of us are busy here getting
 the 1.2.0 release ready at the moment.  I think this is definitely a
 worthwhile plot type to add.  Similar plots are used in Computer Science,
 for example, to visualize the execution of multi-threaded applications, or
 other scheduling problems.  I'd personally use it for that.

 So, yes, let's start talking implementation.  Or, if easier, you could just
 submit a pull request and we can go from there.  Whatever method seems most
 appropriate to you.

I would prefer to get the details worked out before I start coding
since there are a few different approaches.  First thing is to figure
out a good name, I am not sure this is the best name for it.

Assuming we go with the name, here is my proposed call signature:

EventRaster(x, offset=0, height=1, **kargs)

x is a 1D or 2D array.  If a 1D array, it create a single row of
lines.  If it is a 2D array, it creates one row of lines for each row
in the array.

offset determines the positions of the rows.  By default, the first
row is placed with the line center y=0, and subsequent rows are placed
with the line centers at increasing 1-unit increments.  If offset is
defined and is a scalar, the first row is placed at the offset, and
subsequent rows are placed at increasing 1-unit increments.  If offset
is an array, it must be a 1D array of the same length as the second
dimension of x.  In this case each element in offset determines the
center of the corresponding row in the plot.

height determines the length of the lines.  By default the line
stretches from offset-.5 to offset+.5.  If height is defined the line
stretches from offset-.5*height to offset+.5*height.

**kargs are the same as those of plot().

An important thing to note is that the marker will only appear the
center point of each line, not at the ends.

If this is going to be used to implement rug plots, it would need some
way to handle columns of horizontal lines in addition to rows of
vertical lines.  I see two ways to implement this.  First is to have
to plot types, perhaps HEventRaster and VEventRaster.  The first would
be as described above, while the second would be similar but
everything rotated 90 degrees.  Another possibility is to change the
call signature to this:

EventRaster(x, y=None, offset=0, height=1, **kargs)

In this case y behaves the same as x, except it creates columns of
lines instead of rows.  If y is specified x cannot be specified, and
vice versus.  If keyword arguments are not used, it assumes x is what
is wanted.

I don't know which approach is better.

The function will return a list of a new collection type I am
tentatively calling EventCollection.  My thinking would be this would
be a subclass of a new collection type called

Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-09-27 Thread Todd
On Thu, Sep 27, 2012 at 12:58 PM, Thomas Kluyver tho...@kluyver.me.uk wrote:
 On 27 September 2012 11:41, Todd toddr...@gmail.com wrote:
 I would prefer to get the details worked out before I start coding
 since there are a few different approaches.  First thing is to figure
 out a good name, I am not sure this is the best name for it.

 As someone from a field that doesn't regularly use that sort of plot,
 'raster' seems an odd name - it doesn't seem to relate to raster vs.
 vector graphics.

That was exactly my concern.

 From the examples linked earlier in the thread, I'd
 call it something like EventStrip.

The problem is it isn't really a strip either, since it can have many
rows of events.  It could be EventStrips, though.

Some other possibilities that occured to me:

EventPlot
EventsPlot
SequencePlot
SequencesPlot
Events1D
Sequences1D

--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://ad.doubleclick.net/clk;258768047;13503038;j?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-09-27 Thread Todd
On Thu, Sep 27, 2012 at 1:12 PM, Damon McDougall
damon.mcdoug...@gmail.com wrote:
 Hi Todd,

 Firstly, thanks for taking the time to crystallise your thoughts in
 words first. This is one of my bad habits; I tend to rush into things.

 I have some feedback for you, hopefully we can all work together to
 get this right. It's difficult when something new gets implemented and
 someone expects it to do something and the only way to resolve it is
 to break the calling API.

Where is API broken?

 Anyway, I hope you'll find my comments
 helpful at the least. I also encourage others to weigh in with
 opinions and ideas.

Okay, I will discuss the rationale.  I will snip out anything you
agree on for brevity.

 Assuming we go with the name, here is my proposed call signature:

 EventRaster(x, offset=0, height=1, **kargs)

 CamelCase is discouraged for method names. Perhaps 'eventraster'?

Fair enough.

 Also, we could also let **kwargs swallow the 'offset' and 'height'
 keyword arguments. Then the user isn't constrained by which order to
 put them in. The downside of this approach is that introspection is
 more difficult.

I don't understand the advantage of this approach.  If you use keyword
arguments, then the order doesn't matter.  So with the approach above
you can use keyword arguments, in which case you can use whatever
order they want, or you can use positional arguments.  On the other
hand putting it in **kwargs, we lose the ability to use positional
arguments.  So we lose nothing by allowing both positional and keyword
arguments.  It is also easier to implement.

 offset determines the positions of the rows.  By default, the first
 row is placed with the line center y=0, and subsequent rows are placed
 with the line centers at increasing 1-unit increments.  If offset is
 defined and is a scalar, the first row is placed at the offset, and
 subsequent rows are placed at increasing 1-unit increments.  If offset
 is an array, it must be a 1D array of the same length as the second
 dimension of x.  In this case each element in offset determines the
 center of the corresponding row in the plot.

 How about letting offset be either: a) a scalar, determining the
 offset of all rows equally; or b) an array, determining the offset of
 each row individually.

Because people are almost never going to want to have all the lines
stacked right on top of each other.  The plot would be indecipherable
that way.  The defaults are chosen to handle the most common use-cases
most easily.

 In fact, why plot each row at integer y
 coordinates? Could we allow for an optional y-coordinate array, each
 element of which would be the y-coordinate at which to plot a row of
 lines. Then you wouldn't need offset.

That is exactly what offset does if you pass an array.

 If this is going to be used to implement rug plots, it would need some
 way to handle columns of horizontal lines in addition to rows of
 vertical lines.  I see two ways to implement this.  First is to have
 to plot types, perhaps HEventRaster and VEventRaster.  The first would
 be as described above, while the second would be similar but
 everything rotated 90 degrees.  Another possibility is to change the
 call signature to this:

 EventRaster(x, y=None, offset=0, height=1, **kargs)

 I think accepting an 'orientation' kwarg, which can take either
 'horizontal' or 'vertical', determining the orientation of the lines
 and reversing the roles of the x and y arrays.

That would work as well.  Probably cleaner that way

 The function will return a list of a new collection type I am
 tentatively calling EventCollection.  My thinking would be this would
 be a subclass of a new collection type called GenericLineCollection,
 which the current LineCollection would also subclass.  They would
 share things like the color handling and segment handling, however the
 segment handling will be a private method that LineCollection will
 have a public wrapper for.  On the other hand methods to set or add
 segments will remain private in EventCollection, although there will
 be a method to return the segments if an artist really wants to
 manipulate individual segments.

 Why can't we just use LineCollection? I don't see a good reason to
 create a new collection class here; the plot is simple.

Explained below.

 The reason for doing it this way is that manipulating individual rows
 of events should be very common, such as changing their position,
 color, marker, width, and so on.  On the other hand manipulating lines
 individually should not be as common, although still supported.

 Fair enough, then maybe a better idea is to create your own
 EventRaster class (note camel case) to hold all the relevant data in
 arrays. Then make a 'construct_raster' method could return a
 LineCollection. Then again, weren't you passing extra kwargs to
 'plot'? This approach would surely use ax.add_lines or
 ax.add_linecollection something (I can't remember what it's called).

The whole point

Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-09-27 Thread Todd
On Thu, Sep 27, 2012 at 2:17 PM, Damon McDougall
damon.mcdoug...@gmail.com wrote:
 On Thu, Sep 27, 2012 at 12:44 PM, Todd toddr...@gmail.com wrote:
 On Thu, Sep 27, 2012 at 1:12 PM, Damon McDougall
 damon.mcdoug...@gmail.com wrote:
 Hi Todd,

 Firstly, thanks for taking the time to crystallise your thoughts in
 words first. This is one of my bad habits; I tend to rush into things.

 I have some feedback for you, hopefully we can all work together to
 get this right. It's difficult when something new gets implemented and
 someone expects it to do something and the only way to resolve it is
 to break the calling API.

 Where is API broken?

 Nowhere. I wasn't implying you were breaking something. My point was
 that it's easy to add functionality but hard to remove it, therefore
 it's important to get it right from the outset. I'm sorry for the
 misunderstanding; I wasn't clear.

No problem.  I put a lot of other comments inline in my reply to your
email, but your mail reader might have cut them off.

-Todd

--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://ad.doubleclick.net/clk;258768047;13503038;j?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-09-27 Thread Todd
On Thu, Sep 27, 2012 at 1:44 PM, Todd toddr...@gmail.com wrote:
 On Thu, Sep 27, 2012 at 1:12 PM, Damon McDougall
 damon.mcdoug...@gmail.com wrote:
 Hi Todd,

 Firstly, thanks for taking the time to crystallise your thoughts in
 words first. This is one of my bad habits; I tend to rush into things.

 I have some feedback for you, hopefully we can all work together to
 get this right. It's difficult when something new gets implemented and
 someone expects it to do something and the only way to resolve it is
 to break the calling API.

 Where is API broken?

 Anyway, I hope you'll find my comments
 helpful at the least. I also encourage others to weigh in with
 opinions and ideas.

 Okay, I will discuss the rationale.  I will snip out anything you
 agree on for brevity.

 Assuming we go with the name, here is my proposed call signature:

 EventRaster(x, offset=0, height=1, **kargs)

 CamelCase is discouraged for method names. Perhaps 'eventraster'?

 Fair enough.

 Also, we could also let **kwargs swallow the 'offset' and 'height'
 keyword arguments. Then the user isn't constrained by which order to
 put them in. The downside of this approach is that introspection is
 more difficult.

 I don't understand the advantage of this approach.  If you use keyword
 arguments, then the order doesn't matter.  So with the approach above
 you can use keyword arguments, in which case you can use whatever
 order they want, or you can use positional arguments.  On the other
 hand putting it in **kwargs, we lose the ability to use positional
 arguments.  So we lose nothing by allowing both positional and keyword
 arguments.  It is also easier to implement.

 offset determines the positions of the rows.  By default, the first
 row is placed with the line center y=0, and subsequent rows are placed
 with the line centers at increasing 1-unit increments.  If offset is
 defined and is a scalar, the first row is placed at the offset, and
 subsequent rows are placed at increasing 1-unit increments.  If offset
 is an array, it must be a 1D array of the same length as the second
 dimension of x.  In this case each element in offset determines the
 center of the corresponding row in the plot.

 How about letting offset be either: a) a scalar, determining the
 offset of all rows equally; or b) an array, determining the offset of
 each row individually.

 Because people are almost never going to want to have all the lines
 stacked right on top of each other.  The plot would be indecipherable
 that way.  The defaults are chosen to handle the most common use-cases
 most easily.

 In fact, why plot each row at integer y
 coordinates? Could we allow for an optional y-coordinate array, each
 element of which would be the y-coordinate at which to plot a row of
 lines. Then you wouldn't need offset.

 That is exactly what offset does if you pass an array.

 If this is going to be used to implement rug plots, it would need some
 way to handle columns of horizontal lines in addition to rows of
 vertical lines.  I see two ways to implement this.  First is to have
 to plot types, perhaps HEventRaster and VEventRaster.  The first would
 be as described above, while the second would be similar but
 everything rotated 90 degrees.  Another possibility is to change the
 call signature to this:

 EventRaster(x, y=None, offset=0, height=1, **kargs)

 I think accepting an 'orientation' kwarg, which can take either
 'horizontal' or 'vertical', determining the orientation of the lines
 and reversing the roles of the x and y arrays.

 That would work as well.  Probably cleaner that way

 The function will return a list of a new collection type I am
 tentatively calling EventCollection.  My thinking would be this would
 be a subclass of a new collection type called GenericLineCollection,
 which the current LineCollection would also subclass.  They would
 share things like the color handling and segment handling, however the
 segment handling will be a private method that LineCollection will
 have a public wrapper for.  On the other hand methods to set or add
 segments will remain private in EventCollection, although there will
 be a method to return the segments if an artist really wants to
 manipulate individual segments.

 Why can't we just use LineCollection? I don't see a good reason to
 create a new collection class here; the plot is simple.

 Explained below.

 The reason for doing it this way is that manipulating individual rows
 of events should be very common, such as changing their position,
 color, marker, width, and so on.  On the other hand manipulating lines
 individually should not be as common, although still supported.

 Fair enough, then maybe a better idea is to create your own
 EventRaster class (note camel case) to hold all the relevant data in
 arrays. Then make a 'construct_raster' method could return a
 LineCollection. Then again, weren't you passing extra kwargs to
 'plot'? This approach would surely use ax.add_lines

Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-09-26 Thread Todd
On Mon, Sep 24, 2012 at 3:33 PM, Todd toddr...@gmail.com wrote:

 I would like to add a new plot type to matplotlib.  Of course I am willing
 to implement it myself, but I want to confirm that it is acceptable and
 iron out the implementation details and API first so there are no major
 surprises when I submit it.

 I tentatively am calling the plot type an EventRaster plot (name
 suggestions, along with any other suggestions, are welcome).  The plot is
 made up if horizontal rows of identical vertical lines and/or markers.
 Each line or marker represents a discrete event, and each row represents a
 single sequence of events (such as a trial).  The x-axis position of the
 line or marker identifies the location of the event by some measure.  An
 example of what such a plot often looks like is below.

 http://hebb.mit.edu/courses/9.29/2003/athena/dylanh/quad-rast.gif

 This sort of plot is used ubiquitously in neuroscience.  It is used to
 show the time of discrete neural (brain cell) events (called spikes) over
 time in repeated trials, and is generally called a spike raster, raster
 plot, or raster graph.  However, it can be used in any situation where you
 are only concerned with the position of events but not their amplitude,
 especially if you want to look for patterns in those events or look for
 differences between multiple sequences of events.

 Plotting the timing of events is an obvious use case, such as photons
 hitting photodetectors, radioactive decay events, arrival of patients to
 hospitals, calls to hotlines, or car accidents in cities.  However, the
 events do not have to be relative to time.  It could be position, for
 example, such as tree rings along bore holes, road crossings along railroad
 tracks, layers in sediment cores, or particular sequences along a DNA
 strands.

 I'll cover possible implementation details in the next email if everyone
 thinks this is a good idea.


So does anyone think this would be a useful plot type?  If so I can explain
how I plan to implement it and we can discuss changes or improvements to
that.
--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] process for getting a new plot type added

2012-09-24 Thread Todd
Hi, I am interested in implementing a new plot type for matplotlib.  Is
there a specific process I should go through, or is just discussing it on
the mailing list sufficient?

I see matplotlib has a MEP system similar to PEP, but there don't appear to
be that many MEPs so I don't know whether it is used in this sort of
situation or only for more fundamental changes.
--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


[matplotlib-devel] New plot type idea -- EventRaster

2012-09-24 Thread Todd
I would like to add a new plot type to matplotlib.  Of course I am willing
to implement it myself, but I want to confirm that it is acceptable and
iron out the implementation details and API first so there are no major
surprises when I submit it.

I tentatively am calling the plot type an EventRaster plot (name
suggestions, along with any other suggestions, are welcome).  The plot is
made up if horizontal rows of identical vertical lines and/or markers.
Each line or marker represents a discrete event, and each row represents a
single sequence of events (such as a trial).  The x-axis position of the
line or marker identifies the location of the event by some measure.  An
example of what such a plot often looks like is below.

http://hebb.mit.edu/courses/9.29/2003/athena/dylanh/quad-rast.gif

This sort of plot is used ubiquitously in neuroscience.  It is used to show
the time of discrete neural (brain cell) events (called spikes) over time
in repeated trials, and is generally called a spike raster, raster plot, or
raster graph.  However, it can be used in any situation where you are only
concerned with the position of events but not their amplitude, especially
if you want to look for patterns in those events or look for differences
between multiple sequences of events.

Plotting the timing of events is an obvious use case, such as photons
hitting photodetectors, radioactive decay events, arrival of patients to
hospitals, calls to hotlines, or car accidents in cities.  However, the
events do not have to be relative to time.  It could be position, for
example, such as tree rings along bore holes, road crossings along railroad
tracks, layers in sediment cores, or particular sequences along a DNA
strands.

I'll cover possible implementation details in the next email if everyone
thinks this is a good idea.
--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] New plot type idea -- EventRaster

2012-09-24 Thread Todd
On Mon, Sep 24, 2012 at 3:51 PM, Nathaniel Smith n...@pobox.com wrote:
 On Mon, Sep 24, 2012 at 2:33 PM, Todd toddr...@gmail.com wrote:
 This sort of plot is used ubiquitously in neuroscience.  It is used to show
 the time of discrete neural (brain cell) events (called spikes) over time
 in repeated trials, and is generally called a spike raster, raster plot, or
 raster graph.  However, it can be used in any situation where you are only
 concerned with the position of events but not their amplitude, especially if
 you want to look for patterns in those events or look for differences
 between multiple sequences of events.

 This is very closely related to rug plots, which are often used as
 an axis annotation or elsewhere where it's nice to have a small 1-d
 density plot. Examples:
   https://www.cl.cam.ac.uk/~sjm217/projects/graphics/
   http://rforge.org/2009/08/10/fancy-rugs-in-regression-plots/

The implementation I am thinking of for this plot type would also be
able to handle these sorts of plots, although it would probably
require creating horizontal and vertical variants.

--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] [Matplotlib-users] ANN: mpltools 0.1 release

2012-07-17 Thread todd rme
On Wed, Jul 11, 2012 at 5:23 PM, John Hunter jdh2...@gmail.com wrote:


 On Wed, Jul 11, 2012 at 10:09 AM, Damon McDougall
 damon.mcdoug...@gmail.com wrote:

 Well, as Ben said, that error fill plot is neato! It doesn't look too
 complicated, either. I'd be more than happy to port it over later today
 when I get bored of typing up my thesis. It'll probably only take me
 about 30 minutes.

 If nobody is opposed to this idea, I'll go ahead and submit a PR this
 evening (British Summer (hah!) Time).



 While it is a nice graph, I am not sure that the use case is common enough
 to justify a new plotting method.  One can get the same result with:


   In [68]: x = np.linspace(0, 2 * np.pi)

   In [69]: y_sin = np.sin(x)

   In [70]: err = np.concatenate([y_sin + 0.2, y_sin[::-1] - 0.2])

   In [71]: plot(x, y_sin)
   Out[71]: [matplotlib.lines.Line2D object at 0x96959ec]

   In [72]: fill_between(np.concatenate([x, x[::-1]]), err, facecolor='red',
 alpha=0.5)
   Out[72]: matplotlib.collections.PolyCollection object at 0x962758c

 Admittedly the [::-1] thing is a bit counter-intuitive, but rather than
 adding a new plotting method, perhaps we would be better off with a helper
 method to create the xs and ys for fill_between

   xs, ys = mlab.pad_line(x, y, 0.2)
   fill_between(xs, ys)

 JDH

What about adding a property to the existing errorbar to let someone
change it to the filled version?  This could also, potentially, be
extended with other types of error bars if the need arises.

-Todd

--
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Upstream Matplotlib Qt Designer Plugin

2012-03-25 Thread todd rme
On Mon, Mar 19, 2012 at 10:08 PM, Pierre Raybaut
pierre.rayb...@gmail.com wrote:
 Hi all,

 Is anyone interested in including the Matplotlib QtDesigner plugin
 which I wrote for Python(x,y)?

 The code is quite simple and hasn't evolved for a while now (3 years)
 but apparently it is still appreciated by users even outside
 Python(x,y).

 Here are the two files which are necessary to make this plugin work:
 http://code.google.com/p/pythonxy/source/browse/src/python/matplotlib/QtDesigner_Plugins/matplotlibwidget.py
 http://code.google.com/p/pythonxy/source/browse/src/python/matplotlib/QtDesigner_Plugins/PyQt4/plugins/designer/python/matplotlibplugin.py

 The directory struture also has its importance:
 http://code.google.com/p/pythonxy/source/browse/#hg%2Fsrc%2Fpython%2Fmatplotlib%2FQtDesigner_Plugins

 Cheers,
 Pierre

I have been looking at the matplotlib widget code.  It is very helpful
for putting a widget inside PyQt4 windows.  However, it is lacking any
signals and slots to let you easily connect other Qt4 widgets with the
matplotlib one.  Particularly in Qt Designer, using signals and slots
to connect widgets together is very convenient.

I am willing to implement signals and slots, but I need some advice on
the best approach. So far I see three different approaches that may
work:

1. The simplest is just to manually add slots for common commands in
the widget.  I would also probably add some signals for things like
mouse clicks.  However, this requires manually creating the signals
and slots, and will break if matplotlib changes any of its api.  I
would also need to decide whether to use the matplotlib function
naming rules or the Qt4 ones (or both, since I can give the same
signal multiple names).

2. Integrate the signals and slots directly into matplotlib.  This
would probably involve somehow having matplotlib functions exposed as
signals and/or slots, probably somewhere in the PyQt4/pyside backend.
It would probably entail separating the PyQt4/pyside backend into a
PyQt4/pyside widget and a PyQt4/pyside window that contains that
widget.  All the interaction between settings, buttons, etc would use
signals and slots internally.  Users could then use the widget in
other contexts besides the window, and use the same signals and slots
the window uses.  This would also eliminate the need for a separate
widget to be used for Qt Designer. It would still require manually
specifying the signals and slots. I haven't looked in much detail, but
this is probably not that much more difficult than 1.

3. Make PyQt4 backend use widgets for everything.  Each object would
have all of its functions exposed as signals and slots, and all would
be usable in Qt Designer.  If I understand it correctly, the PyQt4
backend uses Agg for the actual painting, so this would require
implementing an entire new backend, so is probably not a good choice
initially.

Either approach would be

--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Upstream Matplotlib Qt Designer Plugin

2012-03-23 Thread todd rme
I've included this in openSUSE's matplotlib packages, it seems to work great.

-Todd

On Mon, Mar 19, 2012 at 10:08 PM, Pierre Raybaut
pierre.rayb...@gmail.com wrote:
 Hi all,

 Is anyone interested in including the Matplotlib QtDesigner plugin
 which I wrote for Python(x,y)?

 The code is quite simple and hasn't evolved for a while now (3 years)
 but apparently it is still appreciated by users even outside
 Python(x,y).

 Here are the two files which are necessary to make this plugin work:
 http://code.google.com/p/pythonxy/source/browse/src/python/matplotlib/QtDesigner_Plugins/matplotlibwidget.py
 http://code.google.com/p/pythonxy/source/browse/src/python/matplotlib/QtDesigner_Plugins/PyQt4/plugins/designer/python/matplotlibplugin.py

 The directory struture also has its importance:
 http://code.google.com/p/pythonxy/source/browse/#hg%2Fsrc%2Fpython%2Fmatplotlib%2FQtDesigner_Plugins

 Cheers,
 Pierre

 -- Message transféré --
 De : todd rme toddrme2...@gmail.com
 Date : 11 mars 2012 12:14
 Objet : [python(x,y)] Upstream Matplotlib Qt Designer Plugin
 À : python(x,y) pytho...@googlegroups.com


 I notice that python(x,y) has a matplotlib plugin for Qt Designer.  I
 think this would be very helpful for general users of matplotlib
 outside of python(x,y).  Is there any possibility of submitting this
 plugin upstream for inclusion with the official matplotlib release?
 That way people who aren't using python(x,y) (for instance Linux users
 who are using their official distribution python packages) could
 benefit from the plugin as well.  Thank you very much.

 -Todd

 --
 You received this message because you are subscribed to the Google
 Groups python(x,y) group.
 To post to this group, send email to pytho...@googlegroups.com.
 To unsubscribe from this group, send email to
 pythonxy+unsubscr...@googlegroups.com.
 For more options, visit this group at
 http://groups.google.com/group/pythonxy?hl=en.

--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
___
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel