Pierre GM wrote:
> All (and Jeff W. in particular),
>
> It's the time of the year where I have to draw maps in batch. I wrote
> a script to process some data recorded at various stations,
> interpolate the data on a grid, draw the corresponding contours on a
> basemap, add a colorbar, and end with adding some extra information on
> the map (scale, stations positions...).
>
> Nothing too fancy, but I ran into a problem with the last few steps.
> As I do not give an explicit 'ax' parameter to any of the basemap
> related methods (.contourf, .plot, .drawmapscale...), I have to rely
> on the defaults: use self.ax if it is not None, gca() otherwise.
> However, drawing a colorbar in midprocess switches the focus to the
> colorbar, and the extra information I was talking about gets plotted
> on the colorbar.
>
> Which brings me to the famous question: is it a bug or a feature ? Is
> there any rational in *not* setting the 'ax' attribute to gca() when
> sit hasn't been set yet and no 'ax' parameter has been specifically
> given as input of a method ?
>
Pierre: The reason I did it that way was so that the basemap instance
could be created independent of any axes instances. For instance, you
can create a basemap instance before an axes instance is created, or you
read in a basemap instance from a pickle. If a axes instance is
associated with a Basemap instance, you can't save it in a pickle. If I
understand you correctly, you are suggesting that when the basemap
instance is created, the "ax" attribute be set to plt.gca() if no axes
instance is passed in through the kwarg, instead of just setting it to
None. In that case, an axes instance will be created and assigned to
the Basemap instance if one doesn't already exist. I guess I don't see
any compelling reason for that, since you can always assign an axes
instance to the Basemap instance later (via "map.ax = plt.gca()". I'd
rather have this done explicitly by the user, than have it happen
automatically, with potentially surprising results.
-Jeff
> Thanks a lot in advance for any explanation:
> P.
>
>
> [As a workaround, I modified my local sources by adding a ._check_ax
> method as below, and used :
> ax = ax or self._check_ax(ax)
> or
> ax = kwargs.pop('ax', None) or self._check_ax()
> depending on the context
>
> def _check_ax(self, ax=None):
> """
> Returns the axis on which to draw.
> By default, returns self.ax. If this latter is None, set it to
> gca().
> """
> #
> if ax is None:
> if self.ax is None:
> try:
> ax = plt.gca()
> except:
> import matplotlib.pyplot as plt
> ax = plt.gca()
> self.ax = ax
> return self.ax
> return ax
>
> ------------------------------------------------------------------------------
> Are you an open source citizen? Join us for the Open Source Bridge conference!
> Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250.
> Need another reason to go? 24-hour hacker lounge. Register today!
> http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org
> _______________________________________________
> Matplotlib-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
------------------------------------------------------------------------------
Are you an open source citizen? Join us for the Open Source Bridge conference!
Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250.
Need another reason to go? 24-hour hacker lounge. Register today!
http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users