You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
(12) |
Sep
(12) |
Oct
(56) |
Nov
(65) |
Dec
(37) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(59) |
Feb
(78) |
Mar
(153) |
Apr
(205) |
May
(184) |
Jun
(123) |
Jul
(171) |
Aug
(156) |
Sep
(190) |
Oct
(120) |
Nov
(154) |
Dec
(223) |
2005 |
Jan
(184) |
Feb
(267) |
Mar
(214) |
Apr
(286) |
May
(320) |
Jun
(299) |
Jul
(348) |
Aug
(283) |
Sep
(355) |
Oct
(293) |
Nov
(232) |
Dec
(203) |
2006 |
Jan
(352) |
Feb
(358) |
Mar
(403) |
Apr
(313) |
May
(165) |
Jun
(281) |
Jul
(316) |
Aug
(228) |
Sep
(279) |
Oct
(243) |
Nov
(315) |
Dec
(345) |
2007 |
Jan
(260) |
Feb
(323) |
Mar
(340) |
Apr
(319) |
May
(290) |
Jun
(296) |
Jul
(221) |
Aug
(292) |
Sep
(242) |
Oct
(248) |
Nov
(242) |
Dec
(332) |
2008 |
Jan
(312) |
Feb
(359) |
Mar
(454) |
Apr
(287) |
May
(340) |
Jun
(450) |
Jul
(403) |
Aug
(324) |
Sep
(349) |
Oct
(385) |
Nov
(363) |
Dec
(437) |
2009 |
Jan
(500) |
Feb
(301) |
Mar
(409) |
Apr
(486) |
May
(545) |
Jun
(391) |
Jul
(518) |
Aug
(497) |
Sep
(492) |
Oct
(429) |
Nov
(357) |
Dec
(310) |
2010 |
Jan
(371) |
Feb
(657) |
Mar
(519) |
Apr
(432) |
May
(312) |
Jun
(416) |
Jul
(477) |
Aug
(386) |
Sep
(419) |
Oct
(435) |
Nov
(320) |
Dec
(202) |
2011 |
Jan
(321) |
Feb
(413) |
Mar
(299) |
Apr
(215) |
May
(284) |
Jun
(203) |
Jul
(207) |
Aug
(314) |
Sep
(321) |
Oct
(259) |
Nov
(347) |
Dec
(209) |
2012 |
Jan
(322) |
Feb
(414) |
Mar
(377) |
Apr
(179) |
May
(173) |
Jun
(234) |
Jul
(295) |
Aug
(239) |
Sep
(276) |
Oct
(355) |
Nov
(144) |
Dec
(108) |
2013 |
Jan
(170) |
Feb
(89) |
Mar
(204) |
Apr
(133) |
May
(142) |
Jun
(89) |
Jul
(160) |
Aug
(180) |
Sep
(69) |
Oct
(136) |
Nov
(83) |
Dec
(32) |
2014 |
Jan
(71) |
Feb
(90) |
Mar
(161) |
Apr
(117) |
May
(78) |
Jun
(94) |
Jul
(60) |
Aug
(83) |
Sep
(102) |
Oct
(132) |
Nov
(154) |
Dec
(96) |
2015 |
Jan
(45) |
Feb
(138) |
Mar
(176) |
Apr
(132) |
May
(119) |
Jun
(124) |
Jul
(77) |
Aug
(31) |
Sep
(34) |
Oct
(22) |
Nov
(23) |
Dec
(9) |
2016 |
Jan
(26) |
Feb
(17) |
Mar
(10) |
Apr
(8) |
May
(4) |
Jun
(8) |
Jul
(6) |
Aug
(5) |
Sep
(9) |
Oct
(4) |
Nov
|
Dec
|
2017 |
Jan
(5) |
Feb
(7) |
Mar
(1) |
Apr
(5) |
May
|
Jun
(3) |
Jul
(6) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
1
(16) |
2
(8) |
3
(4) |
4
|
5
|
6
(3) |
7
(11) |
8
(16) |
9
(1) |
10
(2) |
11
(2) |
12
(6) |
13
(2) |
14
(4) |
15
(5) |
16
(10) |
17
(5) |
18
|
19
|
20
|
21
(3) |
22
|
23
(12) |
24
(7) |
25
(1) |
26
|
27
(3) |
28
(4) |
29
(5) |
30
(2) |
|
|
From: Eric F. <ef...@ha...> - 2015-04-12 19:27:40
|
On 2015/04/05 11:19 PM, giacomo boffi wrote: > INTRO > ===== > > please consider the following code (I'm trying to draw a timeline) > > 1 from matplotlib import pyplot, patches > 2 fig = pyplot.figure() > 3 ax = fig.add_subplot('111') > 4 ax.add_patch(patches.Rectangle((1933,0.25), 73, 0.5)) > 5 pyplot.show() > > that gives me a plot with the x axis that goes from 0.0 to 1.0, > now consider > > ... > 5 ax.set_xlim((1933,1933+73)) > 6 pyplot.show() > > this gives me an x axis that goes _exactly_ from 1933 to 2006, > eventually drawing a line superposed to the lower spine > > ... > 5 ax.plot((1933,1933+73),(0,0)) > 6 pyplot.show() > > gives me what I really want, that is an x axis running from 1930 to > 2010, with the limits automatically rounded by matplotlib... > > (I noted that the extra line forces a rounding also for the y axis > limits, but that's not a problem...) > > QUESTION > ======== > > I want matplotlib to round the limits of the x axis automatically, > when given explicitly the lower and upper limits of the data, how to? I think the initial problem is that ax.add_patch() is not triggering the autoscaling that you are looking for; the higher-level plot() function does so. After your call to ax.add_patch(), try adding ax.autoscale_view(). Eric > > Thank you in advance > |
From: Thomas C. <tca...@gm...> - 2015-04-12 13:24:31
|
You can ``` #import matplotlib #matplotlib.use('nbagg') #%matplotlib nbagg import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animate class Testing(object): def __init__(self, ): self.fig = plt.figure() array = np.random.rand(4,5) array = np.zeros((4,5)) self.pc = plt.pcolor(array, edgecolor='k', linewidth=1., animated=True) self.pc.set_clim([0, 1]) self.points = [plt.scatter(np.random.rand(), np.random.rand(), animated=True)] def update(self, iter_num): array = np.random.rand(4*5) self.pc.set_array(array) for point in self.points: point.set_offsets([np.random.rand(), np.random.rand()]) return (self.pc, ) + tuple(self.points) test = Testing() ani = animate.FuncAnimation(test.fig, test.update, interval=10, blit=False, frames=50) plt.show() ``` note the addition of the `set_clim` line in the `__init__` method. You can also update the scatter artist in-place. The other changes will make it a bit for performant if you use bliting (which does not work with nbagg currently) Sorry I missed that part of the question first time through. Tom On Sun, Apr 12, 2015, 08:31 Ryan Nelson <rne...@gm...> wrote: > Tom, > > Thanks for the links. It does seem like fragments of my problem are > addressed in each of those comments, so I guess I'll have to wait for a bit > until those things get resolved. For now, I can just tell my students to > restart the IPython kernel each time they run the animation, which isn't > that hard. It's too bad that there isn't a 'stop' method now, but it's good > to hear that it isn't a completely terrible idea. > > I do still need help with Question #3 from my original email, though, > because it affects both the Qt and nbagg backends, and it is a bit of a > show stopper. I can't quite understand why initializing a pcolor(mesh) with > random numbers makes it possible to update the array in an animation, but > if you use all zeros or ones, it seems to be immutable. > > Ryan > > On Sat, Apr 11, 2015 at 8:35 PM, Thomas Caswell <tca...@gm...> > wrote: > >> Ryan, >> >> I have not looked at your exact issue yet, but there seems to be some >> underlying issues with animation and nbagg which we have not tracked down >> yet. See: >> >> https://github.com/matplotlib/matplotlib/pull/4290 >> https://github.com/matplotlib/matplotlib/issues/4287 >> https://github.com/matplotlib/matplotlib/issues/4288 >> >> Running until a given condition is an interesting idea, but I think that >> means the animation objects needs to have a public 'stop' method first! >> >> Tom >> >> On Fri, Apr 10, 2015 at 3:00 PM Ryan Nelson <rne...@gm...> >> wrote: >> >>> Good afternoon, all! >>> >>> I'm really digging the nbagg backend, and I'm trying to use it to make >>> an animation. As the subject suggests, though, I'm having some issues with >>> these features. I'm using Python 3.4, Matplotlib 1.4.3, and IPython 3.1. >>> Below is a small code sample that emulates my system. The pcolor call can >>> be substituted for pcolormesh, and I see the same behavior. (Sorry this is >>> a bit long. I tried to break it up as best as possible.) >>> >>> ############# >>> #import matplotlib >>> #matplotlib.use('nbagg') >>> #%matplotlib nbagg >>> import numpy as np >>> import matplotlib.pyplot as plt >>> import matplotlib.animation as animate >>> >>> class Testing(object): >>> def __init__(self, ): >>> self.fig = plt.figure() >>> array = np.random.rand(4,5) >>> #array = np.zeros((4,5)) >>> self.pc = plt.pcolor(array, edgecolor='k', linewidth=1.) >>> self.points = [plt.scatter(np.random.rand(), np.random.rand())] >>> >>> def update(self, iter_num): >>> array = np.random.rand(4*5) >>> self.pc.set_array(array) >>> for point in self.points: >>> point.remove() >>> self.points = [plt.scatter(np.random.rand(), np.random.rand())] >>> >>> test = Testing() >>> animate.FuncAnimation(test.fig, test.update, interval=1000, blit=False) >>> plt.show() >>> ############### >>> >>> 1. As is, this code runs fine with a Qt backend. It also runs fine as a >>> first call in a notebook if the `show` call is commented out and the >>> `%matplotlib` line is uncommented. However, if the `show` call is left in >>> and the `matplotlib.use` call is uncommented, then the pcolor array >>> changes, but the scatterpoint only shows on the first update and then >>> disappears forever. What is the difference between these two invocations? >>> >>> 2. With the `%matplotlib` magic uncommented and `show` removed, the >>> first invocation of this as a cell works fine. Closing the figure (with the >>> red X) and running the cell again shows two scatter plot points. Running it >>> a third time shows three scatter plot points. If you call `plt.clf` in the >>> next cell, I get a series of errors as follows: >>> _____ >>> ERROR:tornado.application:Exception in callback <bound method >>> TimerTornado._on_timer of <matplotlib.backends.backend_nbagg.TimerTornado >>> object at 0x7f894cb10f98>> >>> Traceback (most recent call last): >>> File "/usr/lib64/python3.4/site-packages/tornado/ioloop.py", line 976, >>> in _run >>> return self.callback() >>> File "/usr/lib64/python3.4/site-packages/matplotlib/backend_bases.py", >>> line 1290, in _on_timer >>> ret = func(*args, **kwargs) >>> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", >>> line 925, in _step >>> still_going = Animation._step(self, *args) >>> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", >>> line 784, in _step >>> self._draw_next_frame(framedata, self._blit) >>> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", >>> line 803, in _draw_next_frame >>> self._draw_frame(framedata) >>> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", >>> line 1106, in _draw_frame >>> self._drawn_artists = self._func(framedata, *self._args) >>> File "<ipython-input-2-f9290d8f6154>", line 22, in update >>> point.remove() >>> File "/usr/lib64/python3.4/site-packages/matplotlib/artist.py", line >>> 139, in remove >>> self._remove_method(self) >>> File "/usr/lib64/python3.4/site-packages/matplotlib/axes/_base.py", >>> line 1479, in <lambda> >>> collection._remove_method = lambda h: self.collections.remove(h) >>> ValueError: list.remove(x): x not in list >>> ______ >>> Why does this happen? Is there a way to close the animation cleanly? >>> >>> 3. If I uncomment the `np.zeros` call, the pcolor array never updates >>> irrespective of the backend. I see the same behavior with `np.ones` as >>> well, even if the dtype is set to `float`. Is there are a way to start with >>> a all-zero pcolor that allow dynamic updates? >>> >>> 4. I'd like to be able to have the animation run until a certain >>> condition is met. Is there a way to code a clean break for the animation? >>> >>> >>> As always, any help is most appreciated! >>> >>> Ryan >>> >>> >>> >>> >>> >>> ------------------------------------------------------------ >>> ------------------ >>> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT >>> Develop your own process in accordance with the BPMN 2 standard >>> Learn Process modeling best practices with Bonita BPM through live >>> exercises >>> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- >>> event?utm_ >>> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_ >>> campaign=VA_SF_______________________________________________ >>> Matplotlib-users mailing list >>> Mat...@li... >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >>> >> > |
From: Ryan N. <rne...@gm...> - 2015-04-12 12:31:29
|
Tom, Thanks for the links. It does seem like fragments of my problem are addressed in each of those comments, so I guess I'll have to wait for a bit until those things get resolved. For now, I can just tell my students to restart the IPython kernel each time they run the animation, which isn't that hard. It's too bad that there isn't a 'stop' method now, but it's good to hear that it isn't a completely terrible idea. I do still need help with Question #3 from my original email, though, because it affects both the Qt and nbagg backends, and it is a bit of a show stopper. I can't quite understand why initializing a pcolor(mesh) with random numbers makes it possible to update the array in an animation, but if you use all zeros or ones, it seems to be immutable. Ryan On Sat, Apr 11, 2015 at 8:35 PM, Thomas Caswell <tca...@gm...> wrote: > Ryan, > > I have not looked at your exact issue yet, but there seems to be some > underlying issues with animation and nbagg which we have not tracked down > yet. See: > > https://github.com/matplotlib/matplotlib/pull/4290 > https://github.com/matplotlib/matplotlib/issues/4287 > https://github.com/matplotlib/matplotlib/issues/4288 > > Running until a given condition is an interesting idea, but I think that > means the animation objects needs to have a public 'stop' method first! > > Tom > > On Fri, Apr 10, 2015 at 3:00 PM Ryan Nelson <rne...@gm...> wrote: > >> Good afternoon, all! >> >> I'm really digging the nbagg backend, and I'm trying to use it to make an >> animation. As the subject suggests, though, I'm having some issues with >> these features. I'm using Python 3.4, Matplotlib 1.4.3, and IPython 3.1. >> Below is a small code sample that emulates my system. The pcolor call can >> be substituted for pcolormesh, and I see the same behavior. (Sorry this is >> a bit long. I tried to break it up as best as possible.) >> >> ############# >> #import matplotlib >> #matplotlib.use('nbagg') >> #%matplotlib nbagg >> import numpy as np >> import matplotlib.pyplot as plt >> import matplotlib.animation as animate >> >> class Testing(object): >> def __init__(self, ): >> self.fig = plt.figure() >> array = np.random.rand(4,5) >> #array = np.zeros((4,5)) >> self.pc = plt.pcolor(array, edgecolor='k', linewidth=1.) >> self.points = [plt.scatter(np.random.rand(), np.random.rand())] >> >> def update(self, iter_num): >> array = np.random.rand(4*5) >> self.pc.set_array(array) >> for point in self.points: >> point.remove() >> self.points = [plt.scatter(np.random.rand(), np.random.rand())] >> >> test = Testing() >> animate.FuncAnimation(test.fig, test.update, interval=1000, blit=False) >> plt.show() >> ############### >> >> 1. As is, this code runs fine with a Qt backend. It also runs fine as a >> first call in a notebook if the `show` call is commented out and the >> `%matplotlib` line is uncommented. However, if the `show` call is left in >> and the `matplotlib.use` call is uncommented, then the pcolor array >> changes, but the scatterpoint only shows on the first update and then >> disappears forever. What is the difference between these two invocations? >> >> 2. With the `%matplotlib` magic uncommented and `show` removed, the first >> invocation of this as a cell works fine. Closing the figure (with the red >> X) and running the cell again shows two scatter plot points. Running it a >> third time shows three scatter plot points. If you call `plt.clf` in the >> next cell, I get a series of errors as follows: >> _____ >> ERROR:tornado.application:Exception in callback <bound method >> TimerTornado._on_timer of <matplotlib.backends.backend_nbagg.TimerTornado >> object at 0x7f894cb10f98>> >> Traceback (most recent call last): >> File "/usr/lib64/python3.4/site-packages/tornado/ioloop.py", line 976, >> in _run >> return self.callback() >> File "/usr/lib64/python3.4/site-packages/matplotlib/backend_bases.py", >> line 1290, in _on_timer >> ret = func(*args, **kwargs) >> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line >> 925, in _step >> still_going = Animation._step(self, *args) >> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line >> 784, in _step >> self._draw_next_frame(framedata, self._blit) >> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line >> 803, in _draw_next_frame >> self._draw_frame(framedata) >> File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line >> 1106, in _draw_frame >> self._drawn_artists = self._func(framedata, *self._args) >> File "<ipython-input-2-f9290d8f6154>", line 22, in update >> point.remove() >> File "/usr/lib64/python3.4/site-packages/matplotlib/artist.py", line >> 139, in remove >> self._remove_method(self) >> File "/usr/lib64/python3.4/site-packages/matplotlib/axes/_base.py", >> line 1479, in <lambda> >> collection._remove_method = lambda h: self.collections.remove(h) >> ValueError: list.remove(x): x not in list >> ______ >> Why does this happen? Is there a way to close the animation cleanly? >> >> 3. If I uncomment the `np.zeros` call, the pcolor array never updates >> irrespective of the backend. I see the same behavior with `np.ones` as >> well, even if the dtype is set to `float`. Is there are a way to start with >> a all-zero pcolor that allow dynamic updates? >> >> 4. I'd like to be able to have the animation run until a certain >> condition is met. Is there a way to code a clean break for the animation? >> >> >> As always, any help is most appreciated! >> >> Ryan >> >> >> >> >> >> ------------------------------------------------------------ >> ------------------ >> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT >> Develop your own process in accordance with the BPMN 2 standard >> Learn Process modeling best practices with Bonita BPM through live >> exercises >> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- >> event?utm_ >> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_ >> campaign=VA_SF_______________________________________________ >> Matplotlib-users mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> > |
From: Thomas C. <tca...@gm...> - 2015-04-12 01:59:49
|
I am not really sure what you mean by 'round'. Do you want to suppress the offset or do you want mpl to pick 'nice' values after you have explicitly set the limits? Tom On Mon, Apr 6, 2015 at 5:27 AM giacomo boffi <gia...@gm...> wrote: > INTRO > ===== > > please consider the following code (I'm trying to draw a timeline) > > 1 from matplotlib import pyplot, patches > 2 fig = pyplot.figure() > 3 ax = fig.add_subplot('111') > 4 ax.add_patch(patches.Rectangle((1933,0.25), 73, 0.5)) > 5 pyplot.show() > > that gives me a plot with the x axis that goes from 0.0 to 1.0, > now consider > > ... > 5 ax.set_xlim((1933,1933+73)) > 6 pyplot.show() > > this gives me an x axis that goes _exactly_ from 1933 to 2006, > eventually drawing a line superposed to the lower spine > > ... > 5 ax.plot((1933,1933+73),(0,0)) > 6 pyplot.show() > > gives me what I really want, that is an x axis running from 1930 to > 2010, with the limits automatically rounded by matplotlib... > > (I noted that the extra line forces a rounding also for the y axis > limits, but that's not a problem...) > > QUESTION > ======== > > I want matplotlib to round the limits of the x axis automatically, > when given explicitly the lower and upper limits of the data, how to? > > Thank you in advance > > -- > "We have met the enemy and he is us." > --- Pogo. > > > ------------------------------------------------------------ > ------------------ > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT > Develop your own process in accordance with the BPMN 2 standard > Learn Process modeling best practices with Bonita BPM through live > exercises > http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- > event?utm_ > source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
From: Thomas C. <tca...@gm...> - 2015-04-12 01:03:04
|
Malk, This is a bit of a gap in mpl currently (but has come up a couple of times ( https://github.com/matplotlib/matplotlib/issues/4217, https://github.com/matplotlib/matplotlib/issues/2203, and http://matplotlib.org/devdocs/devel/MEP/MEP24.html). One of the hold ups has been lack of a developer that uses polar plots day-to-day and a lack of really clear use cases. I think we have three (at least) distinct use cases. 1. origin always an 0, negative radius rotates by pi, always full 2pi around, always solid circle (no inner axes) (useful for plotting bunches of vectors against each other) 2. center is at arbitrary 'r', values less than 'origin' are just not shown, always full 2pi, no inner axes (use for for dB plots showing power as function of angle) 3. inner axes with arbitrary origin, possibly not full 2pi It is not immediately clear to me if these can all be done with the same projection or even if they can be done with the 'standard' Axes class or if we need to user AxesArtist here. This discussion should probably move to MEP24/the devel list. What version of mpl are you using? Your example causes seg-faults (!) on my system, but I have not sorted out why (may be really strange install issues on my end). Tom On Thu, Apr 9, 2015 at 6:08 AM Maik Hoffmann <mai...@b-...> wrote: > Hello, > I'm using mpl_toolkits.axisartist.floating_axes.GridHelperCurveLinear > for creating half-polar plots from 180 degree measurements for receive > sensitivity. > > Working with the measurement values itself is no problem if I let the > values scaling start at zero. > If I use normalized values I can plot it also, but if I transform it > into the dB scale I got a segfault in this lib. > > I provide an example. For my problems I would like to have a solution > that I can either use r limit from -30 to 0 (f3) or changing the tick > labels in figure f2. > > And by the way is there a possibility that the if i want to plot data in > the range from 80 to 120, that rlim(80,120) would set the 80 to the > centerpoint? At the moment I got only a small stripe. > > [code] > """Demo of polar plot of arbitrary theta. This is a workaround for MPL's > polar plot limitation > to a full 360 deg. > > Based on > http://matplotlib.org/mpl_toolkits/axes_grid/examples/ > demo_floating_axes.py > > get from > https://github.com/neuropy/neuropy/blob/master/neuropy/ > scripts/polar_demo.py > TODO: license / copyright > """ > > from __future__ import division > from __future__ import print_function > > import numpy as np > import matplotlib.pyplot as plt > > from matplotlib.transforms import Affine2D > from matplotlib.projections import PolarAxes > from mpl_toolkits.axisartist import angle_helper > from mpl_toolkits.axisartist.grid_finder import MaxNLocator > from mpl_toolkits.axisartist.floating_axes import GridHelperCurveLinear, > FloatingSubplot > > > def fractional_polar_axes(f, thlim=(0, 180), rlim=(0, 1), step=(30, 0.2), > thlabel='theta', rlabel='r', ticklabels=True, > theta_offset=0): > """Return polar axes that adhere to desired theta (in deg) and r > limits. steps for theta > and r are really just hints for the locators.""" > th0, th1 = thlim # deg > r0, r1 = rlim > thstep, rstep = step > > tr_rotate = Affine2D().translate(theta_offset, 0) > # scale degrees to radians: > tr_scale = Affine2D().scale(np.pi/180., 1.) > #pa = axes(polar="true") # Create a polar axis > pa = PolarAxes > tr = tr_rotate + tr_scale + pa.PolarTransform() > theta_grid_locator = angle_helper.LocatorDMS((th1-th0)//thstep) > r_grid_locator = MaxNLocator((r1-r0)//rstep) > theta_tick_formatter = angle_helper.FormatterDMS() > > grid_helper = GridHelperCurveLinear(tr, > extremes=(th0, th1, r0, r1), > grid_locator1=theta_grid_locator, > grid_locator2=r_grid_locator, > > tick_formatter1=theta_tick_formatter, > tick_formatter2=None) > > a = FloatingSubplot(f, 111, grid_helper=grid_helper) > > f.add_subplot(a) > > # adjust x axis (theta): > a.axis["bottom"].set_visible(False) > a.axis["top"].set_axis_direction("bottom") # tick direction > a.axis["top"].toggle(ticklabels=ticklabels, label=bool(thlabel)) > a.axis["top"].major_ticklabels.set_axis_direction("top") > a.axis["top"].label.set_axis_direction("top") > > # adjust y axis (r): > a.axis["left"].set_axis_direction("bottom") # tick direction > a.axis["right"].set_axis_direction("top") # tick direction > a.axis["left"].toggle(ticklabels=ticklabels, label=bool(rlabel)) > > # add labels: > a.axis["top"].label.set_text(thlabel) > a.axis["left"].label.set_text(rlabel) > > # create a parasite axes whose transData is theta, r: > auxa = a.get_aux_axes(tr) > # make aux_ax to have a clip path as in a?: > auxa.patch = a.patch > # this has a side effect that the patch is drawn twice, and > possibly over some other > # artists. So, we decrease the zorder a bit to prevent this: > a.patch.zorder = -2 > > > # add sector lines for both dimensions: > thticks = grid_helper.grid_info['lon_info'][0] > rticks = grid_helper.grid_info['lat_info'][0] > for th in thticks[1:-1]: # all but the first and last > auxa.plot([th, th], [r0, r1], '--', c='grey', zorder=-1) > for ri, r in enumerate(rticks): > # plot first r line as axes border in solid black only if it > isn't at r=0 > if ri == 0 and r != 0: > ls, lw, color = 'solid', 2, 'black' > else: > ls, lw, color = 'dashed', 1, 'grey' > # From http://stackoverflow.com/a/19828753/2020363 > auxa.add_artist(plt.Circle([0, 0], radius=r, ls=ls, lw=lw, > color=color, fill=False, > transform=auxa.transData._b, zorder=-1)) > > return auxa > > > if __name__ == '__main__': > f1 = plt.figure(facecolor='white', figsize=(16/2.54, 12/2.54), > dpi=600) > a1 = fractional_polar_axes(f1, thlim=(-90, 90),step=(10, > 0.2),theta_offset=90) > # example spiral plot: > thstep = 10 > th = np.arange(-90, 90+thstep, thstep) # deg > rstep = 1/(len(th)-1) > r = np.arange(0, 1+rstep, rstep) > a1.plot(th, r, 'b') > > > f1.show() > > f2 = plt.figure(facecolor='white', figsize=(16/2.54, 12/2.54), > dpi=600) > a2 = fractional_polar_axes(f2, thlim=(-90, > 90),rlim=(0,30),step=(10, 8),theta_offset=90) > # example spiral plot: > r2 = 20 * np.log10(r) +30 > a2.plot(th, r2, 'b') > > f2.show() > > f3 = plt.figure(facecolor='white', figsize=(16/2.54, 12/2.54), > dpi=600) > a3 = fractional_polar_axes(f2, thlim=(-90, 90),rlim=(-30,0), > step=(10, 8),theta_offset=90) > # example spiral plot: > r3 = 20 * np.log10(r) > a3.plot(th, r2, 'b') > > f2.show() > > [\code] > > -- > > > ------------------------------------------------------------ > ------------------ > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT > Develop your own process in accordance with the BPMN 2 standard > Learn Process modeling best practices with Bonita BPM through live > exercises > http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- > event?utm_ > source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
From: Thomas C. <tca...@gm...> - 2015-04-12 00:35:54
|
Ryan, I have not looked at your exact issue yet, but there seems to be some underlying issues with animation and nbagg which we have not tracked down yet. See: https://github.com/matplotlib/matplotlib/pull/4290 https://github.com/matplotlib/matplotlib/issues/4287 https://github.com/matplotlib/matplotlib/issues/4288 Running until a given condition is an interesting idea, but I think that means the animation objects needs to have a public 'stop' method first! Tom On Fri, Apr 10, 2015 at 3:00 PM Ryan Nelson <rne...@gm...> wrote: > Good afternoon, all! > > I'm really digging the nbagg backend, and I'm trying to use it to make an > animation. As the subject suggests, though, I'm having some issues with > these features. I'm using Python 3.4, Matplotlib 1.4.3, and IPython 3.1. > Below is a small code sample that emulates my system. The pcolor call can > be substituted for pcolormesh, and I see the same behavior. (Sorry this is > a bit long. I tried to break it up as best as possible.) > > ############# > #import matplotlib > #matplotlib.use('nbagg') > #%matplotlib nbagg > import numpy as np > import matplotlib.pyplot as plt > import matplotlib.animation as animate > > class Testing(object): > def __init__(self, ): > self.fig = plt.figure() > array = np.random.rand(4,5) > #array = np.zeros((4,5)) > self.pc = plt.pcolor(array, edgecolor='k', linewidth=1.) > self.points = [plt.scatter(np.random.rand(), np.random.rand())] > > def update(self, iter_num): > array = np.random.rand(4*5) > self.pc.set_array(array) > for point in self.points: > point.remove() > self.points = [plt.scatter(np.random.rand(), np.random.rand())] > > test = Testing() > animate.FuncAnimation(test.fig, test.update, interval=1000, blit=False) > plt.show() > ############### > > 1. As is, this code runs fine with a Qt backend. It also runs fine as a > first call in a notebook if the `show` call is commented out and the > `%matplotlib` line is uncommented. However, if the `show` call is left in > and the `matplotlib.use` call is uncommented, then the pcolor array > changes, but the scatterpoint only shows on the first update and then > disappears forever. What is the difference between these two invocations? > > 2. With the `%matplotlib` magic uncommented and `show` removed, the first > invocation of this as a cell works fine. Closing the figure (with the red > X) and running the cell again shows two scatter plot points. Running it a > third time shows three scatter plot points. If you call `plt.clf` in the > next cell, I get a series of errors as follows: > _____ > ERROR:tornado.application:Exception in callback <bound method > TimerTornado._on_timer of <matplotlib.backends.backend_nbagg.TimerTornado > object at 0x7f894cb10f98>> > Traceback (most recent call last): > File "/usr/lib64/python3.4/site-packages/tornado/ioloop.py", line 976, > in _run > return self.callback() > File "/usr/lib64/python3.4/site-packages/matplotlib/backend_bases.py", > line 1290, in _on_timer > ret = func(*args, **kwargs) > File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line > 925, in _step > still_going = Animation._step(self, *args) > File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line > 784, in _step > self._draw_next_frame(framedata, self._blit) > File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line > 803, in _draw_next_frame > self._draw_frame(framedata) > File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line > 1106, in _draw_frame > self._drawn_artists = self._func(framedata, *self._args) > File "<ipython-input-2-f9290d8f6154>", line 22, in update > point.remove() > File "/usr/lib64/python3.4/site-packages/matplotlib/artist.py", line > 139, in remove > self._remove_method(self) > File "/usr/lib64/python3.4/site-packages/matplotlib/axes/_base.py", line > 1479, in <lambda> > collection._remove_method = lambda h: self.collections.remove(h) > ValueError: list.remove(x): x not in list > ______ > Why does this happen? Is there a way to close the animation cleanly? > > 3. If I uncomment the `np.zeros` call, the pcolor array never updates > irrespective of the backend. I see the same behavior with `np.ones` as > well, even if the dtype is set to `float`. Is there are a way to start with > a all-zero pcolor that allow dynamic updates? > > 4. I'd like to be able to have the animation run until a certain condition > is met. Is there a way to code a clean break for the animation? > > > As always, any help is most appreciated! > > Ryan > > > > > > ------------------------------------------------------------ > ------------------ > BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT > Develop your own process in accordance with the BPMN 2 standard > Learn Process modeling best practices with Bonita BPM through live > exercises > http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- > event?utm_ > source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_ > campaign=VA_SF_______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |