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
|
From: Benjamin R. <ben...@ou...> - 2015-04-23 16:26:06
|
The documentation should say "the number", not "a number". This particular argument expects either a generator, an iterable, or an integer. If none is given, it will try and figure out something for itself. The integer is used to create a number generator, and so you effectively have an iterable that supplies the first argument to the animation function. Often times, the first argument to this function is just a frame index. It is quite possible that you don't need it at all, but it is a part of the defined API that the FuncAnimation assumes to be able to call the user-supplied function. Does that help? Ben Root <shameless_plug> P.S. - My new book "Interactive Applications using Matplotlib" has an entire chapter devoted to animations </shameless_plug> On Thu, Apr 23, 2015 at 12:05 PM, Virgil Stokes <vs...@it...> wrote: > Thanks for your reply to my post, Jerzy. > > On 23-Apr-2015 13:18, Jerzy Karczmarczuk wrote: > > > > Le 23/04/2015 12:22, Virgil Stokes a écrit : > > The following interesting example (random_data.py) is posted at: > > http://matplotlib.org/1.4.2/examples/animation/random_data.html > > > import matplotlib.pyplot as plt > import matplotlib.animation as animation > > import numpy as np > > Yes, I forgot to include this > > > fig, ax = plt.subplots() > line, = ax.plot(np.random.rand(10)) > ax.set_ylim(0, 1) > > def update(data): > line.set_ydata(data) > return line, > > def data_gen(): > while True: yield np.random.rand(10) > > ani = animation.FuncAnimation(fig, update, data_gen, interval=100) > plt.show() > > This codes works; but, I am very confused by it. For example: > > 1. There are 3 positional arguments given for animation.FuncAnimation; > but, in the > API documentation for this class ( > http://matplotlib.org/api/animation_api.html), only > two positional arguments are shown. > > The third one is the third one, > "*frames* can be a generator, an iterable, or a number of frames." > > This makes very little sense to me --- what does "or a number of frames" > mean? > > The name "data_gen" could suggest its meaning (after having read the doc). > > I am not sure what you are referencing as "the doc"; but I did read the > documentation several times and English is my native language. > > Note please that the keyword parameters are specified extra. > > I am aware of this. Perhaps, I am a Python dummy --- when I see something > like value = None in a Python API argument, I interpret this as a keyword > argument and not a generator. > > > 2. data, the argument to the update function seems to be undefined. > > FuncAnimation usually passes the frame number: 0, 1, 2, ... as the first > parameter of the update function, when "frames" is None, or the number of > frames. If - as here - the third parameter is a generator, it passes the > yielded data to update. > It may be used or not. > > Ok, I understand that better now. But, you say "or *the number* of > frames" but the documentation reads "or *a number* of frames" --- what > does this mean? > > And I still do not understand how to use the first argument of the > function to be called for the animation. In another animation example ( > histogram.py), the animation function is defined by: > > def animate(i): > # simulate new data coming in > data = np.random.randn(1000 > n, bins = np.histogram(data, 100) > top = bottom + n > verts[1::5,1] = top > verts[2::5,1] = top > > This works of course; but, why is the "i" required? There is no other > reference to it in the entire script. If I remove it; i.e. use def > animate(): I get the following error: > > TypeError: animate() takes no arguments (1 given) > > I do not understand how this explains the fact that the function no longer > has any arguments. Please explain the meaning of this error message? > > > Please, in such cases test your programs by adding some simple tracing > contraptions, say, print(data) inside update. > > I did this and more before posting my email. I would not have posted this > unless I thought it was necessary. And I thought one purpose of this user > group was to help people --- even if they ask a question which may be > annoying or "stupid" in some subscribers opinion. I try to remember what a > very wise teacher once said --- "there is no such thing as a stupid > question". > > > ------------------------------------------------------------------------------ > 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: Virgil S. <vs...@it...> - 2015-04-23 16:05:27
|
Thanks for your reply to my post, Jerzy. On 23-Apr-2015 13:18, Jerzy Karczmarczuk wrote: > > > Le 23/04/2015 12:22, Virgil Stokes a écrit : >> The following interesting example (random_data.py) is posted at: >> >> http://matplotlib.org/1.4.2/examples/animation/random_data.html >> >> >> import matplotlib.pyplot as plt >> import matplotlib.animation as animation > import numpy as np Yes, I forgot to include this >> >> fig, ax = plt.subplots() >> line, = ax.plot(np.random.rand(10)) >> ax.set_ylim(0, 1) >> >> def update(data): >> line.set_ydata(data) >> return line, >> >> def data_gen(): >> while True: yield np.random.rand(10) >> >> ani = animation.FuncAnimation(fig, update, data_gen, interval=100) >> plt.show() >> >> This codes works; but, I am very confused by it. For example: >> >> 1. There are 3 positional arguments given for animation.FuncAnimation; but, >> in the >> API documentation for this class >> (http://matplotlib.org/api/animation_api.html), only >> two positional arguments are shown. > The third one is the third one, > "/frames/ can be a generator, an iterable, or a number of frames." This makes very little sense to me --- what does "or a number of frames" mean? > The name "data_gen" could suggest its meaning (after having read the doc). I am not sure what you are referencing as "the doc"; but I did read the documentation several times and English is my native language. > Note please that the keyword parameters are specified extra. I am aware of this. Perhaps, I am a Python dummy --- when I see something like value = None in a Python API argument, I interpret this as a keyword argument and not a generator. > >> 2. data, the argument to the update function seems to be undefined. > FuncAnimation usually passes the frame number: 0, 1, 2, ... as the first > parameter of the update function, when "frames" is None, or the number of > frames. If - as here - the third parameter is a generator, it passes the > yielded data to update. > It may be used or not. Ok, I understand that better now. But, you say "or *the number* of frames" but the documentation reads "or *a number* of frames" --- what does this mean? And I still do not understand how to use the first argument of the function to be called for the animation. In another animation example (histogram.py), the animation function is defined by: def animate(i): # simulate new data coming in data = np.random.randn(1000 n, bins = np.histogram(data, 100) top = bottom + n verts[1::5,1] = top verts[2::5,1] = top This works of course; but, why is the "i" required? There is no other reference to it in the entire script. If I remove it; i.e. use def animate(): I get the following error: TypeError: animate() takes no arguments (1 given) I do not understand how this explains the fact that the function no longer has any arguments. Please explain the meaning of this error message? > > Please, in such cases test your programs by adding some simple tracing > contraptions, say, print(data) inside update. I did this and more before posting my email. I would not have posted this unless I thought it was necessary. And I thought one purpose of this user group was to help people --- even if they ask a question which may be annoying or "stupid" in some subscribers opinion. I try to remember what a very wise teacher once said --- "there is no such thing as a stupid question". |
From: Jerzy K. <jer...@un...> - 2015-04-23 11:18:57
|
Le 23/04/2015 12:22, Virgil Stokes a écrit : > The following interesting example (random_data.py) is posted at: > > http://matplotlib.org/1.4.2/examples/animation/random_data.html > > > import matplotlib.pyplot as plt > import matplotlib.animation as animation import numpy as np > > fig, ax = plt.subplots() > line, = ax.plot(np.random.rand(10)) > ax.set_ylim(0, 1) > > def update(data): > line.set_ydata(data) > return line, > > def data_gen(): > while True: yield np.random.rand(10) > > ani = animation.FuncAnimation(fig, update, data_gen, interval=100) > plt.show() > > This codes works; but, I am very confused by it. For example: > > 1. There are 3 positional arguments given for animation.FuncAnimation; > but, in the > API documentation for this class > (http://matplotlib.org/api/animation_api.html), only > two positional arguments are shown. The third one is the third one, "/frames/ can be a generator, an iterable, or a number of frames." The name "data_gen" could suggest its meaning (after having read the doc). Note please that the keyword parameters are specified extra. > 2. data, the argument to the update function seems to be undefined. FuncAnimation usually passes the frame number: 0, 1, 2, ... as the first parameter of the update function, when "frames" is None, or the number of frames. If - as here - the third parameter is a generator, it passes the yielded data to update. It may be used or not. Please, in such cases test your programs by adding some simple tracing contraptions, say, print(data) inside update. Jerzy Karczmarczuk |
From: Virgil S. <vs...@it...> - 2015-04-23 10:44:15
|
The following interesting example (random_data.py) is posted at: http://matplotlib.org/1.4.2/examples/animation/random_data.html import matplotlib.pyplot as plt import matplotlib.animation as animation fig, ax = plt.subplots() line, = ax.plot(np.random.rand(10)) ax.set_ylim(0, 1) def update(data): line.set_ydata(data) return line, def data_gen(): while True: yield np.random.rand(10) ani = animation.FuncAnimation(fig, update, data_gen, interval=100) plt.show() This codes works; but, I am very confused by it. For example: 1. There are 3 positional arguments given for animation.FuncAnimation; but, in the API documentation for this class (http://matplotlib.org/api/animation_api.html), only two positional arguments are shown. 2. data, the argument to the update function seems to be undefined. I would appreciate an explanation (in some detail) of how this code actually works. |
From: burak1000 <bur...@gm...> - 2015-04-21 20:33:06
|
Hi all, I believe I've found a bug in scatter function in matplotlib 1.4.2: from numpy import * import matplotlib from matplotlib.pyplot import * figure() subplot(111) h = scatter([NAN], [NAN], marker="o", facecolor="r", edgecolor="r", s=3) legend([h], ["scatter"]) savefig("out.png") close() The code above fails with ValueError exception: Traceback (most recent call last): File "legend.py", line 9, in <module> legend([h], ["scatter"]) File "/usr/local/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/pyplot.py", line 3381, in legend ret = gca().legend(*args, **kwargs) File "/usr/local/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/axes.py", line 4778, in legend self.legend_ = mlegend.Legend(self, handles, labels, **kwargs) File "/usr/local/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/legend.py", line 366, in __init__ self._init_legend_box(handles, labels) File "/usr/local/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/legend.py", line 630, in _init_legend_box handlebox) File "/usr/local/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/legend_handler.py", line 103, in __call__ handlebox.get_transform()) File "/usr/local/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/legend_handler.py", line 325, in create_artists width, height, fontsize) File "/usr/local/lib/python2.7/site-packages/matplotlib-1.3.1-py2.7-linux-x86_64.egg/matplotlib/legend_handler.py", line 282, in get_sizes size_max = max(orig_handle.get_sizes()) * legend.markerscale ** 2 ValueError: max() arg is an empty sequence There is some more information and the source of the problem described here: http://stackoverflow.com/questions/29743696/legends-for-scatter-plots-with-nans-in-matplotlib Thanks, Tomasz -- View this message in context: http://matplotlib.1069221.n5.nabble.com/Problem-creating-legend-for-scatter-plot-with-NANs-tp45419.html Sent from the matplotlib - users mailing list archive at Nabble.com. |
From: Benjamin R. <ben...@ou...> - 2015-04-21 13:44:03
|
The addmpl() method isn't right. You created a canvas object, assigned it to self.canvas, but then tried to call FigureCanvas.__init__(), passing it whatever object "self" is. What class is addmpl() a part of? What does it subclass? On Tue, Apr 21, 2015 at 7:24 AM, Christian Ambros <am...@ym...> wrote: > Hi, > > I embedded Ryan's examble for PyQt5-matplotlib use into my App but I get > the following error: > > /usr/local/lib/python3.4/dist-packages/mpl_toolkits/mplot3d/axes3d.py:1009: > UserWarning: Axes3D.figure.canvas is 'None', mouse rotation disabled. Set > canvas then call Axes3D.mouse_init(). > warnings.warn('Axes3D.figure.canvas is \'None\', mouse rotation > disabled. Set canvas then call Axes3D.mouse_init().') > > From Stackoverflow, which host to question about this, I know that mouse > actions are disabled when the canvas is re-initialized by whatever. > > The only position I do such an operation is in here: > > > > > > > > *def addmpl(self, fig): self.canvas = FigureCanvas(fig) > #FigureCanvas.__init__(self, fig) #Axes3D.mouse_init(self) > self.mplvl.addWidget(self.canvas) self.canvas.draw() > self.toolbar = NavigationToolbar(self.canvas, self.mplwindow, > coordinates=True) self.mplvl.addWidget(self.toolbar)* > > On of the Stackoverflow suggestion says, that re initializing FigureCanvas > should do the trick but I'll get: > > Traceback (most recent call last): > File "./ex_0.1.py", line 145, in <module> > main(sys.argv) > File "./ex_0.1.py", line 53, in main > mainwindow.addmpl(fig1) > File "./ex_0.1.py", line 116, in addmpl > FigureCanvas.__init__(self, fig) > File > "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_qt5agg.py", > line 181, in __init__ > FigureCanvasQT.__init__(self, figure) > File > "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_qt5.py", > line 237, in __init__ > super(FigureCanvasQT, self).__init__(figure=figure) > TypeError: super(type, obj): obj must be an instance or subtype of type > > as follow-up error message. > > just using *Axes3D.mouse_init()* , as suggested by matplotlib itself, > leads to: > > Traceback (most recent call last): > File "./ex_0.1.py", line 146, in <module> > main(sys.argv) > File "./ex_0.1.py", line 53, in main > mainwindow.addmpl(fig1) > File "./ex_0.1.py", line 118, in addmpl > Axes3D.mouse_init() > TypeError: mouse_init() missing 1 required positional argument: 'self' > > adding self leads to: > > Traceback (most recent call last): > File "./ex_0.1.py", line 146, in <module> > main(sys.argv) > File "./ex_0.1.py", line 53, in main > mainwindow.addmpl(fig1) > File "./ex_0.1.py", line 118, in addmpl > Axes3D.mouse_init(self) > File > "/usr/local/lib/python3.4/dist-packages/mpl_toolkits/mplot3d/axes3d.py", > line 1002, in mouse_init > canv = self.figure.canvas > AttributeError: 'Main' object has no attribute 'figure' > ./ex_0.1.py & > > Maybe I'm adding those lines at the wrong place, but I could fined > anything useful in the matplotlib documantation, that would help me out, > either. > > Any thougts that might help? > > Cheers, > Christian > > -- > "A little learning never caused anyone's head to explode!" > > > "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" > > > ------------------------------------------------------------------------------ > 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: Christian A. <am...@ym...> - 2015-04-21 11:42:25
|
Hi, I embedded Ryan's examble for PyQt5-matplotlib use into my App but I get the following error: /usr/local/lib/python3.4/dist-packages/mpl_toolkits/mplot3d/axes3d.py:1009: UserWarning: Axes3D.figure.canvas is 'None', mouse rotation disabled. Set canvas then call Axes3D.mouse_init(). warnings.warn('Axes3D.figure.canvas is \'None\', mouse rotation disabled. Set canvas then call Axes3D.mouse_init().') >From Stackoverflow, which host to question about this, I know that mouse actions are disabled when the canvas is re-initialized by whatever. The only position I do such an operation is in here: def addmpl(self, fig): self.canvas = FigureCanvas(fig) #FigureCanvas.__init__(self, fig) #Axes3D.mouse_init(self) self.mplvl.addWidget(self.canvas) self.canvas.draw() self.toolbar = NavigationToolbar(self.canvas, self.mplwindow, coordinates=True) self.mplvl.addWidget(self.toolbar) On of the Stackoverflow suggestion says, that re initializing FigureCanvas should do the trick but I'll get: Traceback (most recent call last): File "./ex_0.1.py", line 145, in <module> main(sys.argv) File "./ex_0.1.py", line 53, in main mainwindow.addmpl(fig1) File "./ex_0.1.py", line 116, in addmpl FigureCanvas.__init__(self, fig) File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_qt5agg.py", line 181, in __init__ FigureCanvasQT.__init__(self, figure) File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_qt5.py", line 237, in __init__ super(FigureCanvasQT, self).__init__(figure=figure) TypeError: super(type, obj): obj must be an instance or subtype of type as follow-up error message. just using Axes3D.mouse_init() , as suggested by matplotlib itself, leads to: Traceback (most recent call last): File "./ex_0.1.py", line 146, in <module> main(sys.argv) File "./ex_0.1.py", line 53, in main mainwindow.addmpl(fig1) File "./ex_0.1.py", line 118, in addmpl Axes3D.mouse_init() TypeError: mouse_init() missing 1 required positional argument: 'self' adding self leads to: Traceback (most recent call last): File "./ex_0.1.py", line 146, in <module> main(sys.argv) File "./ex_0.1.py", line 53, in main mainwindow.addmpl(fig1) File "./ex_0.1.py", line 118, in addmpl Axes3D.mouse_init(self) File "/usr/local/lib/python3.4/dist-packages/mpl_toolkits/mplot3d/axes3d.py", line 1002, in mouse_init canv = self.figure.canvas AttributeError: 'Main' object has no attribute 'figure' ./ex_0.1.py & Maybe I'm adding those lines at the wrong place, but I could fined anything useful in the matplotlib documantation, that would help me out, either. Any thougts that might help? Cheers,Christian -- "A little learning never caused anyone's head to explode!" "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" |
From: Denis-Alexander E. <den...@gm...> - 2015-04-17 16:37:48
|
Thanks everyone, I finally got back to this, your suggestions worked like a charme, example outputs can be seen here: https://github.com/mne-tools/mne-python/pull/1972 Best, Denis 2014-12-23 12:27 GMT+01:00 Phil Elson <pel...@gm...>: > If I understand your question fully, then yes it does. > Have a play, and let us know how you get on. > > Best, > > Phil > > On 22 December 2014 at 11:15, Denis-Alexander Engemann < > den...@gm...> wrote: > >> Thanks Phil, >> >> just to make sure I inderstand the logic of PathPatch. Does it cut out >> vertices / paths that are detected to be inside an outline as the star in >> this example? >> >> -Denis >> >> >> 2014-12-22 12:09 GMT+01:00 Phil Elson <pel...@gm...>: >> >>> Sorry its taken so long to get an answer, but essentially you want to >>> concatenate the outer coordinates with the inner ones (reversed) to >>> indicate that it is a hole. There is a pretty (simple) useful example that >>> I added a few years ago for demonstrating the use of paths for markers: >>> http://matplotlib.org/examples/pylab_examples/marker_path.html >>> >>> Constructing a patch from a path is as simple as (untested): >>> >>> import matplotlib.patches as mpatches >>> patch = mpatches.PathPatch(my_path, facecolor='red', edgecolor='yellow') >>> axes.add_patch(patch) >>> >>> >>> HTH, >>> >>> Phil >>> >>> >>> On 19 December 2014 at 23:01, Denis-Alexander Engemann < >>> den...@gm...> wrote: >>> >>>> Dear list, >>>> >>>> I would like to create a custom image clipping mask using patches. My >>>> constraint is that my patch is required to have an outer and multiple inner >>>> outlines. >>>> To provide an analogy, think of a mask used for disguise where you >>>> leave three holes, two for the eyes, one for the mouth. >>>> I have the xy coordinates for the 'head', and the xy coordinates for >>>> each of the holes that I don't want to be hidden by the ensuing clipping >>>> mask. >>>> >>>> What's the matplotlib way to construct my desired path + patch from >>>> that? >>>> Note, it's important in my case to use a patch object. What I need to >>>> do would not work by simply masking my image using a masked array. >>>> >>>> Any pointer would be highly appreciated -- >>>> Denis >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> 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=164703151&iu=/4140/ostg.clktrk >>>> _______________________________________________ >>>> Matplotlib-users mailing list >>>> Mat...@li... >>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >>>> >>>> >>> >> > |
From: Nicolas P. R. <Nic...@in...> - 2015-04-17 11:38:15
|
[Apology for cross-posting] Dear all, EuroScipy 2015, the annual conference on Python in science will take place in Cambridge, UK on 26-30 August 2015. The conference features two days of tutorials followed by two days of scientific talks & posters and an extra day dedicated to developer sprints. It is the major event in Europe in the field of technical/scientific computing within the Python ecosystem. Data scientists, analysts, quants, PhD's, scientists and students from more than 20 countries attended the conference last year. The topics presented at EuroSciPy are very diverse, with a focus on advanced software engineering and original uses of Python and its scientific libraries, either in theoretical or experimental research, from both academia and the industry. Submissions for posters, talks & tutorials (beginner and advanced) are welcome on our website at http://www.euroscipy.org/2015/ Sprint proposals should be addressed directly to the organisation at eur...@py... Important dates Mar 24, 2015 Call for talks, posters & tutorials Apr 30, 2015 Talk and tutorials submission deadline May 1, 2015 Registration opens May 30, 2015 Final program announced Jun 15, 2015 Early-bird registration ends Aug 26-27, 2015 Tutorials Aug 28-29, 2015 Main conference Aug 30, 2015 Sprints We look forward to an exciting conference and hope to see you in Cambridge The EuroSciPy 2015 Team - http://www.euroscipy.org/2015/ |
From: Fabrice S. <si...@lm...> - 2015-04-17 08:04:58
|
Le vendredi 17 avril 2015, oyster a écrit : > Two 8bpp(Gimp, xnview say so) graylevel png files can be downloaded > The first (ramp-gray.png) which gives right array shape is > http://bbs.blendercn.org/data/attachment/forum/201504/17/090627ejhixti8vdthdnnn.png > The second one (python-gray.png) which gives 'wrong' array shape, at > least to me, is > http://bbs.blendercn.org/data/attachment/forum/201504/16/222351w3952n3o9968m9a5.png > > [code] > from pylab import * > > imgRampPng=imread('ramp-gray.png') > print (imgRampPng.shape) #(1, 255), that is right > print (imgRampPng.min(),imgRampPng.max()) #(0.0, 0.99607843) > print () > > imgGrayPng=imread('python-gray.png') > print (imgGrayPng.shape) #(128, 128, 3), *but I suppose it should > be (128, 128)* > print (imgGrayPng.min(),imgGrayPng.max()) #(0.0, 0.98823529) > print () > Ch1=imgGrayPng[:,:,0] > Ch2=imgGrayPng[:,:,1] > Ch3=imgGrayPng[:,:,2] > print (Ch1.min(), Ch1.max()) #(0.0, 0.98823529) > print (Ch2.min(), Ch2.max()) #(0.0, 0.98823529) > print (Ch3.min(), Ch3.max()) #(0.0, 0.98823529) #that is to say, > Ch1/2/3 hold same data > print () > [/code] Did you read my answer from yesterday ? your python-gray.png uses a color palette, the integer values stored in file are indexes to the (RGB) values given in the palette. Matplotlib is doing right in converting the indexes to the RGB values. The color palette represents here the grayscale, that's why all channel are equal. But the data is stored in the compact palette way. How were the two files produced? -- Fabrice |
From: Maik H. <mai...@b-...> - 2015-04-17 05:46:26
|
Hi, with normal polar plot it would work, but there is the problem with the half plot. So I use AxisArtist already. The segfault is caused by GridHelperCurveLinear and it appears on all my Computers here Python 2.7 (2 x Win7 64Bit, 1xWin7 32Bit, 2x Linux 64Bit) and mpl 1.4.2 The current solution would work for me, if I could change the axis tick labels created with axisartist. Maik Am 12.04.2015 um 03:02 schrieb Thomas Caswell: > 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 >> > -- wissenschaftlicher Mitarbeiter Lehrstuhl Allgemeine Elektrotechnik und Messtechnik (AEMT) Fakultät Maschinenbau, Elektrotechnik und Wirtschaftsingenieurwesen Brandenburgische Technische Universität Cottbus Siemens-Halske-Ring 14 D-03046 Cottbus Tel.: +49-355-69-3425 Fax: +49-355-69-4104 http://www.tu-cottbus.de/fakultaet3/de/elektrotechnik-messtechnik/ |
From: oyster <lep...@gm...> - 2015-04-17 01:22:06
|
Two 8bpp(Gimp, xnview say so) graylevel png files can be downloaded The first (ramp-gray.png) which gives right array shape is http://bbs.blendercn.org/data/attachment/forum/201504/17/090627ejhixti8vdthdnnn.png The second one (python-gray.png) which gives 'wrong' array shape, at least to me, is http://bbs.blendercn.org/data/attachment/forum/201504/16/222351w3952n3o9968m9a5.png [code] from pylab import * imgRampPng=imread('ramp-gray.png') print (imgRampPng.shape) #(1, 255), that is right print (imgRampPng.min(),imgRampPng.max()) #(0.0, 0.99607843) print () imgGrayPng=imread('python-gray.png') print (imgGrayPng.shape) #(128, 128, 3), *but I suppose it should be (128, 128)* print (imgGrayPng.min(),imgGrayPng.max()) #(0.0, 0.98823529) print () Ch1=imgGrayPng[:,:,0] Ch2=imgGrayPng[:,:,1] Ch3=imgGrayPng[:,:,2] print (Ch1.min(), Ch1.max()) #(0.0, 0.98823529) print (Ch2.min(), Ch2.max()) #(0.0, 0.98823529) print (Ch3.min(), Ch3.max()) #(0.0, 0.98823529) #that is to say, Ch1/2/3 hold same data print () [/code] |
From: Thomas C. <tca...@gm...> - 2015-04-16 18:16:21
|
The 'animated' property is used _deep_ with in `axes.draw` ( https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/axes/_base.py#L2035) to skip artists with the 'animated' flag set. This makes them play nice with blitting (which explicitly uses `axes.draw_artist`) so they are not drawn on a call to `ax.draw` (which sets up the background canvas). Sorry, I should not have included them with out a good explanation, I was feeling too fancy with that example. Tom On Thu, Apr 16, 2015 at 11:27 AM Ryan Nelson <rne...@gm...> wrote: > Ben, > > Sorry. I probably should have just dropped that entirely. In my code > sample, it is actually commented out because it breaks the animation with > the nbagg backend. It was in Tom's example, so I left it in because I > wanted to find out what it was doing. > > Ryan > > On Thu, Apr 16, 2015 at 9:30 AM, Benjamin Root <ben...@ou...> wrote: > >> I just noticed your use of "animated=True". I have had trouble using that >> in the past with the animation module. It is a leftover from the days >> before the animation module and isn't actually used by it, IIRC. Try not >> supplying that argument. >> >> On Thu, Apr 16, 2015 at 8:18 AM, Ryan Nelson <rne...@gm...> >> wrote: >> >>> Tom, >>> >>> Thanks for the code. As it was given, I had to change `blit=True` in the >>> `FuncAnimation` call in order to get this to work in a regular Qt backend. >>> It did not work with the nbagg backend; however, if I used this code it >>> works fine: >>> #### >>> %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=250, >>> blit=False, frames=50) >>> plt.show() >>> #### >>> Also this code solves the problem I was having with several scatter >>> points being displayed upon multiple runs of the same code cell. >>> >>> I wasn't familiar with the "animated" keyword, and it is not well >>> documented yet. Can you give me a quick explanation of what it is doing? >>> >>> Ben: thanks for the hint about the _stop() method. I might look into >>> that for my example. >>> >>> Thank you all for your assistance. Things are working pretty much as I >>> need now! >>> >>> Ryan >>> >>> On Sun, Apr 12, 2015 at 9:24 AM, Thomas Caswell <tca...@gm...> >>> wrote: >>> >>>> 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 >>>>>>> >>>>>> >>>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> 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-16 15:29:40
|
Oops. I meant bits not bytes in my earlier statements. Sorry. On Thu, Apr 16, 2015 at 11:24 AM, Ryan Nelson <rne...@gm...> wrote: > xnview says it is 128*128*8, but "print >> imread('python-gray.png').shape" says (128, 128, 3), however I suppose >> it should be (128, 128)! > > Not sure that this is true, but I guess that xnview is using the third > dimension here to refer to a number of bytes. In this case, it is two > bytes, one for the black/white level and the other for alpha level. When > you import this with imread, the png is converted into a Numpy array. The > default behavior in this case is to create an array which is 128*128*3 > because the third dimmension is the (R,G,B) levels, which will all be equal > for a gray scale image. This behavior is probably intentional so that you > don't have to write different code to handle gray/color images. > > For python-color.png, it is my fault. xnview says it is 128*128*32, so >> it has alpha channel. Hence "imread().shape =(128, 128, 4)" is right > > If the third dimension from xnview is bytes, then yes, you are correct. > > btw. imread return array which has value between 0 and 1 for PNG file. >> But for other picture format, the value is 0~255. The manual says >> matplotlib reads PNG only by it self, and other files via PIL.But I >> think it is better to make the returned array consistent. > > That is most likely due to the way that PNG and e.g. older JPG are > defined. PNG defines each RGBA value using float32, while older JPG uses > uint8. Therefor, it would not make sense to change the dtype of the image > on import. > > Hope that helps. > Ryan > > > > > On Thu, Apr 16, 2015 at 10:51 AM, oyster <lep...@gm...> wrote: > >> Firstly, thanks, Fabrice Silva >> >> I have checked my picture files again. >> >> For python-gray.png, now it is attacched here or can be downloaded >> from >> http://bbs.blendercn.org/data/attachment/forum/201504/16/222351w3952n3o9968m9a5.png >> . >> xnview says it is 128*128*8, but "print >> imread('python-gray.png').shape" says (128, 128, 3), however I suppose >> it should be (128, 128)! >> >> For python-color.png, it is my fault. xnview says it is 128*128*32, so >> it has alpha channel. Hence "imread().shape =(128, 128, 4)" is right >> >> btw. imread return array which has value between 0 and 1 for PNG file. >> But for other picture format, the value is 0~255. The manual says >> matplotlib reads PNG only by it self, and other files via PIL.But I >> think it is better to make the returned array consistent. >> >> >> ------------------------------------------------------------------------------ >> 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-16 15:27:40
|
Ben, Sorry. I probably should have just dropped that entirely. In my code sample, it is actually commented out because it breaks the animation with the nbagg backend. It was in Tom's example, so I left it in because I wanted to find out what it was doing. Ryan On Thu, Apr 16, 2015 at 9:30 AM, Benjamin Root <ben...@ou...> wrote: > I just noticed your use of "animated=True". I have had trouble using that > in the past with the animation module. It is a leftover from the days > before the animation module and isn't actually used by it, IIRC. Try not > supplying that argument. > > On Thu, Apr 16, 2015 at 8:18 AM, Ryan Nelson <rne...@gm...> > wrote: > >> Tom, >> >> Thanks for the code. As it was given, I had to change `blit=True` in the >> `FuncAnimation` call in order to get this to work in a regular Qt backend. >> It did not work with the nbagg backend; however, if I used this code it >> works fine: >> #### >> %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=250, >> blit=False, frames=50) >> plt.show() >> #### >> Also this code solves the problem I was having with several scatter >> points being displayed upon multiple runs of the same code cell. >> >> I wasn't familiar with the "animated" keyword, and it is not well >> documented yet. Can you give me a quick explanation of what it is doing? >> >> Ben: thanks for the hint about the _stop() method. I might look into that >> for my example. >> >> Thank you all for your assistance. Things are working pretty much as I >> need now! >> >> Ryan >> >> On Sun, Apr 12, 2015 at 9:24 AM, Thomas Caswell <tca...@gm...> >> wrote: >> >>> 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 >>>>>> >>>>> >>>> >> >> >> ------------------------------------------------------------------------------ >> 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-16 15:24:31
|
> > xnview says it is 128*128*8, but "print > imread('python-gray.png').shape" says (128, 128, 3), however I suppose > it should be (128, 128)! Not sure that this is true, but I guess that xnview is using the third dimension here to refer to a number of bytes. In this case, it is two bytes, one for the black/white level and the other for alpha level. When you import this with imread, the png is converted into a Numpy array. The default behavior in this case is to create an array which is 128*128*3 because the third dimmension is the (R,G,B) levels, which will all be equal for a gray scale image. This behavior is probably intentional so that you don't have to write different code to handle gray/color images. For python-color.png, it is my fault. xnview says it is 128*128*32, so > it has alpha channel. Hence "imread().shape =(128, 128, 4)" is right If the third dimension from xnview is bytes, then yes, you are correct. btw. imread return array which has value between 0 and 1 for PNG file. > But for other picture format, the value is 0~255. The manual says > matplotlib reads PNG only by it self, and other files via PIL.But I > think it is better to make the returned array consistent. That is most likely due to the way that PNG and e.g. older JPG are defined. PNG defines each RGBA value using float32, while older JPG uses uint8. Therefor, it would not make sense to change the dtype of the image on import. Hope that helps. Ryan On Thu, Apr 16, 2015 at 10:51 AM, oyster <lep...@gm...> wrote: > Firstly, thanks, Fabrice Silva > > I have checked my picture files again. > > For python-gray.png, now it is attacched here or can be downloaded > from > http://bbs.blendercn.org/data/attachment/forum/201504/16/222351w3952n3o9968m9a5.png > . > xnview says it is 128*128*8, but "print > imread('python-gray.png').shape" says (128, 128, 3), however I suppose > it should be (128, 128)! > > For python-color.png, it is my fault. xnview says it is 128*128*32, so > it has alpha channel. Hence "imread().shape =(128, 128, 4)" is right > > btw. imread return array which has value between 0 and 1 for PNG file. > But for other picture format, the value is 0~255. The manual says > matplotlib reads PNG only by it self, and other files via PIL.But I > think it is better to make the returned array consistent. > > > ------------------------------------------------------------------------------ > 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: Fabrice S. <si...@lm...> - 2015-04-16 15:23:31
|
Le jeudi 16 avril 2015, oyster a écrit : > Firstly, thanks, Fabrice Silva > > I have checked my picture files again. > > For python-gray.png, now it is attacched here or can be downloaded > from http://bbs.blendercn.org/data/attachment/forum/201504/16/222351w3952n3o9968m9a5.png. > xnview says it is 128*128*8, but "print > imread('python-gray.png').shape" says (128, 128, 3), however I suppose > it should be (128, 128)! Funnily (or not), the png is in fact 8-bits depth so you could infer it is grayscale, but matplotlib is right : your file uses a color palette. The 8-bits values refer to indices of the 256-length color palette. These indices are then converted back to the colorspace, so the shape is eventually (...,3). Unfortunately, the color palette is here the grayscale... -- Fabrice |
From: oyster <lep...@gm...> - 2015-04-16 14:52:04
|
Firstly, thanks, Fabrice Silva I have checked my picture files again. For python-gray.png, now it is attacched here or can be downloaded from http://bbs.blendercn.org/data/attachment/forum/201504/16/222351w3952n3o9968m9a5.png. xnview says it is 128*128*8, but "print imread('python-gray.png').shape" says (128, 128, 3), however I suppose it should be (128, 128)! For python-color.png, it is my fault. xnview says it is 128*128*32, so it has alpha channel. Hence "imread().shape =(128, 128, 4)" is right btw. imread return array which has value between 0 and 1 for PNG file. But for other picture format, the value is 0~255. The manual says matplotlib reads PNG only by it self, and other files via PIL.But I think it is better to make the returned array consistent. |
From: Benjamin R. <ben...@ou...> - 2015-04-16 13:49:07
|
That will be up to him. The only reason why I know about the work is because our publisher wanted to make sure that our two books didn't cover the same material. He isn't a regular on the mailing list, so I don't know if he even would see this message. I'll let him know that there is interest. Ben Root On Wed, Apr 15, 2015 at 9:16 PM, Chris O'Halloran <cm...@gm...> wrote: > On 16 April 2015 at 09:51, Benjamin Root <ben...@ou...> wrote: > >> A little birdie has told me that someone else is writing a new >> comprehensive matplotlib book (I think it would replace Sandros' book). >> Last I heard from the birdie, he was most of the way done with the >> manuscript. Based on my experience with the edit/review process, I would >> guess 2-3 more months to see it finished and published. >> >> > Oh cool. I'll look out for this. Will it be advertised on this list? > > > ------------------------------------------------------------------------------ > 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: Benjamin R. <ben...@ou...> - 2015-04-16 13:31:07
|
I just noticed your use of "animated=True". I have had trouble using that in the past with the animation module. It is a leftover from the days before the animation module and isn't actually used by it, IIRC. Try not supplying that argument. On Thu, Apr 16, 2015 at 8:18 AM, Ryan Nelson <rne...@gm...> wrote: > Tom, > > Thanks for the code. As it was given, I had to change `blit=True` in the > `FuncAnimation` call in order to get this to work in a regular Qt backend. > It did not work with the nbagg backend; however, if I used this code it > works fine: > #### > %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=250, > blit=False, frames=50) > plt.show() > #### > Also this code solves the problem I was having with several scatter points > being displayed upon multiple runs of the same code cell. > > I wasn't familiar with the "animated" keyword, and it is not well > documented yet. Can you give me a quick explanation of what it is doing? > > Ben: thanks for the hint about the _stop() method. I might look into that > for my example. > > Thank you all for your assistance. Things are working pretty much as I > need now! > > Ryan > > On Sun, Apr 12, 2015 at 9:24 AM, Thomas Caswell <tca...@gm...> > wrote: > >> 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 >>>>> >>>> >>> > > > ------------------------------------------------------------------------------ > 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-16 12:18:41
|
Tom, Thanks for the code. As it was given, I had to change `blit=True` in the `FuncAnimation` call in order to get this to work in a regular Qt backend. It did not work with the nbagg backend; however, if I used this code it works fine: #### %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=250, blit=False, frames=50) plt.show() #### Also this code solves the problem I was having with several scatter points being displayed upon multiple runs of the same code cell. I wasn't familiar with the "animated" keyword, and it is not well documented yet. Can you give me a quick explanation of what it is doing? Ben: thanks for the hint about the _stop() method. I might look into that for my example. Thank you all for your assistance. Things are working pretty much as I need now! Ryan On Sun, Apr 12, 2015 at 9:24 AM, Thomas Caswell <tca...@gm...> wrote: > 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: Chris O'H. <cm...@gm...> - 2015-04-16 01:16:08
|
On 16 April 2015 at 09:51, Benjamin Root <ben...@ou...> wrote: > A little birdie has told me that someone else is writing a new > comprehensive matplotlib book (I think it would replace Sandros' book). > Last I heard from the birdie, he was most of the way done with the > manuscript. Based on my experience with the edit/review process, I would > guess 2-3 more months to see it finished and published. > > Oh cool. I'll look out for this. Will it be advertised on this list? |
From: Benjamin R. <ben...@ou...> - 2015-04-15 21:51:50
|
A little birdie has told me that someone else is writing a new comprehensive matplotlib book (I think it would replace Sandros' book). Last I heard from the birdie, he was most of the way done with the manuscript. Based on my experience with the edit/review process, I would guess 2-3 more months to see it finished and published. Cheers! Ben Root On Wed, Apr 15, 2015 at 5:43 PM, Chris O'Halloran <cm...@gm...> wrote: > That's cool. I just found the book provided the right level of detail for > me to start using QtDesigner with my projects. I can't speak for PyQt5 but > I don't see the concepts have changed much over the past 5 or so years. > Agreed though, if you're brand new to python and are only familiar with > python3 then typing in the code verbatim (python2 style) may cause you > problems that frustrate the learning process. > > > > On 15 April 2015 at 19:49, Christian Ambros <am...@ym...> wrote: > >> No offense, but it really is outdated. Consider that it'll take two years >> to do the writing and the lecture work the research material is form 2007 >> to 2008. We now are in 2015. As you can tell from other books which have >> been published between 2013 and a really helpy book from March, 24th 2015 >> (yes, Benjamin Root wrote it), even they don't cover latest enhancements up >> to six month before print, (which might be seen a reasonable since changing >> is easy in a digitized world like ours). >> A good tutorial for the once, who do not have much experience in this >> field (I count myself in with the just one and a half year of experience in >> gui programming) is two things, actual up to six month to a year and >> straight forward, meaning It tells you what to do and doesn't bother you >> with design thoughts, API explanations nor tries to teach you programming. >> I have that book in my possession, but it didn't turn out to be helpful >> if you do not have the time do read it in whole. If you have the time to >> spin freely, you still will have conquered 80% by yourself and because it >> is still outdated for pyhton3 and matplotlib 1.4.3 the use is questionable. >> >> cheers, >> Christian >> >> -- >> "A little learning never caused anyone's head to explode!" >> >> >> "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" >> >> >> >> On Wednesday, April 15, 2015 3:44 AM, Chris O'Halloran < >> cm...@gm...> wrote: >> >> >> Can I recommend this book. It was very helpful to me in figuring much of >> this out. >> >> >> https://www.packtpub.com/application-development/matplotlib-python-developers >> >> On 14 April 2015 at 18:14, Christian Ambros <am...@ym...> wrote: >> >> Hi Ryan, >> >> wow! This tutorial is one of the best I ever encountered. Nothing is >> missing, nothing is cryptic or unclear. What I like best is, that it get's >> along without using Qt Designer plugins or something similar strange. It's >> a good basis to start. Maybe you should write a book, covering all the >> untold things one needs to solve problems like that. I browsed through >> plenty of books the last weeks and what really is missing, is a cookbook >> about Qt Designer, Glade and wxWidgets and how to fill it with python3 and >> it's lib's like matplotlib, pyqtgraph, numpy, sympy etc. >> >> I would buy it right away! >> cheers, >> Christian >> >> -- >> "A little learning never caused anyone's head to explode!" >> >> >> "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" >> >> >> >> On Friday, April 10, 2015 7:14 PM, Ryan Nelson <rne...@gm...> >> wrote: >> >> >> Christian, >> >> As it turns out, I wrote a blog post (for my terrible blog) about using >> Designer to create a MPL based GUI ( >> http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/). >> I was going to write this up for the MPL docs... But it got really long (3 >> parts), so I just used my personal site. It got so long because this was >> the second time I needed to figure this out, and I wanted to make a very >> detailed outline for my own future reference. Unfortunately, I don't have >> any experience with Qt5, but I imagine things are similar. I think they >> just rearranged the locations of some of the widgets, but I'd be curious to >> hear your experience. I gave up on PyQtdesignerplugins. I think it makes >> more sense to just use a generic widget as the MPL container. >> >> I would be very happy if you had comments for my Qt designer posts. >> >> Ryan >> >> On Wed, Apr 8, 2015 at 5:47 AM, Christian Ambros <am...@ym...> >> wrote: >> >> Hi Ryan, >> >> could you write down, as a tutorial, how you built the example with the >> qt designer? >> In the last hours I read all most everything what can be found on the >> issue of getting matplotlib running with pyqt5 and the designer but as you >> realized yourself, there is little to be found handy. >> >> I'm stuck at a project, which has to use python3, and pyqt5 and am not >> allowed by my boss to fall back to pyqt4 or qt_compat. He wants to make >> sure that we use the latest revisions. >> >> So I#m very pleased to read that someone already set food on this >> terrain. >> Qt5.4.1 is running and I installed PyQtdesingerplugins, in mind that they >> were written for PyQt4. Are they usable in 5? I added the env-variables to >> my bashrc, did get any changes shown in the designer. Of course I did a >> re-log-in to start fresh, but any changes were noteable. >> What possible ways of embedding matplotlib into a designer base pyqt5-gui >> else, are there? >> >> cheers, >> Christian >> >> >> >> -- >> "A little learning never caused anyone's head to explode!" >> >> >> "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" >> >> >> >> On Wednesday, February 18, 2015 11:59 PM, Ryan Nelson < >> rne...@gm...> wrote: >> >> >> Hello list, >> >> A couple months ago, I spent quite a bit of time trying to figure out how >> to use Qt designer create a GUI with an embedded MPL window. Unfortunately, >> the Scipy cookbook page ( >> http://wiki.scipy.org/Cookbook/Matplotlib/Qt_with_IPython_and_Designer) >> is very outdated. A recent post ( >> http://matplotlib.1069221.n5.nabble.com/Re-Keep-list-of-figures-or-plots-and-flip-through-list-using-UI-td44961.html) >> brought up some questions about a use case very similar to mine, so I redid >> my example and was going to write a quick tutorial for the docs. >> >> Unfortunately, I'm not a Qt guru, so I thought that I would ask on the >> list for some advice. The OP and I were both interested in being able to >> have a list of figures that you could select from to change the plot >> window. The embedding examples in the docs create subclasses of >> FigureClass* and embed the plotting figure/axes/etc. This works but gets >> tricky, though, when trying to switch plots. Also, for interactive IPython >> work, I didn't like that the plotting objects were mixed in with all the >> QtGui.QWidget attributes, which makes introspective searching painful. My >> solution was to create a dictionary of matplotlib.figure.Figure objects >> that had all of the plotting stuff defined. Then when I select a new plot >> from the list, the old one is removed and a new FigureClass object is >> created using the selected Figure object. Has anyone else successfully done >> something like this? Is there a better way? Also, it seems if I zoom the >> current plot, change to a new plot, and change back, the zoom region is >> retained. Anyone know how to reset the zoom region? >> >> Attached is my example: "window.py" is the Designer-created main window >> and "custommpl.py" is the subclass of the main window that I wrote. It's >> about as short as I could make it. >> >> Thanks >> >> Ryan >> >> >> >> >> ------------------------------------------------------------------------------ >> 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=190641631&iu=/4140/ostg.clktrk >> _______________________________________________ >> Matplotlib-users mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> >> >> >> >> >> >> >> ------------------------------------------------------------------------------ >> 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 >> >> >> >> >> ------------------------------------------------------------------------------ >> 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 >> >> >> >> >> ------------------------------------------------------------------------------ >> 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 >> >> > > > ------------------------------------------------------------------------------ > 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: Chris O'H. <cm...@gm...> - 2015-04-15 21:44:02
|
That's cool. I just found the book provided the right level of detail for me to start using QtDesigner with my projects. I can't speak for PyQt5 but I don't see the concepts have changed much over the past 5 or so years. Agreed though, if you're brand new to python and are only familiar with python3 then typing in the code verbatim (python2 style) may cause you problems that frustrate the learning process. On 15 April 2015 at 19:49, Christian Ambros <am...@ym...> wrote: > No offense, but it really is outdated. Consider that it'll take two years > to do the writing and the lecture work the research material is form 2007 > to 2008. We now are in 2015. As you can tell from other books which have > been published between 2013 and a really helpy book from March, 24th 2015 > (yes, Benjamin Root wrote it), even they don't cover latest enhancements up > to six month before print, (which might be seen a reasonable since changing > is easy in a digitized world like ours). > A good tutorial for the once, who do not have much experience in this > field (I count myself in with the just one and a half year of experience in > gui programming) is two things, actual up to six month to a year and > straight forward, meaning It tells you what to do and doesn't bother you > with design thoughts, API explanations nor tries to teach you programming. > I have that book in my possession, but it didn't turn out to be helpful if > you do not have the time do read it in whole. If you have the time to spin > freely, you still will have conquered 80% by yourself and because it is > still outdated for pyhton3 and matplotlib 1.4.3 the use is questionable. > > cheers, > Christian > > -- > "A little learning never caused anyone's head to explode!" > > > "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" > > > > On Wednesday, April 15, 2015 3:44 AM, Chris O'Halloran <cm...@gm...> > wrote: > > > Can I recommend this book. It was very helpful to me in figuring much of > this out. > > > https://www.packtpub.com/application-development/matplotlib-python-developers > > On 14 April 2015 at 18:14, Christian Ambros <am...@ym...> wrote: > > Hi Ryan, > > wow! This tutorial is one of the best I ever encountered. Nothing is > missing, nothing is cryptic or unclear. What I like best is, that it get's > along without using Qt Designer plugins or something similar strange. It's > a good basis to start. Maybe you should write a book, covering all the > untold things one needs to solve problems like that. I browsed through > plenty of books the last weeks and what really is missing, is a cookbook > about Qt Designer, Glade and wxWidgets and how to fill it with python3 and > it's lib's like matplotlib, pyqtgraph, numpy, sympy etc. > > I would buy it right away! > cheers, > Christian > > -- > "A little learning never caused anyone's head to explode!" > > > "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" > > > > On Friday, April 10, 2015 7:14 PM, Ryan Nelson <rne...@gm...> > wrote: > > > Christian, > > As it turns out, I wrote a blog post (for my terrible blog) about using > Designer to create a MPL based GUI ( > http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/). > I was going to write this up for the MPL docs... But it got really long (3 > parts), so I just used my personal site. It got so long because this was > the second time I needed to figure this out, and I wanted to make a very > detailed outline for my own future reference. Unfortunately, I don't have > any experience with Qt5, but I imagine things are similar. I think they > just rearranged the locations of some of the widgets, but I'd be curious to > hear your experience. I gave up on PyQtdesignerplugins. I think it makes > more sense to just use a generic widget as the MPL container. > > I would be very happy if you had comments for my Qt designer posts. > > Ryan > > On Wed, Apr 8, 2015 at 5:47 AM, Christian Ambros <am...@ym...> > wrote: > > Hi Ryan, > > could you write down, as a tutorial, how you built the example with the qt > designer? > In the last hours I read all most everything what can be found on the > issue of getting matplotlib running with pyqt5 and the designer but as you > realized yourself, there is little to be found handy. > > I'm stuck at a project, which has to use python3, and pyqt5 and am not > allowed by my boss to fall back to pyqt4 or qt_compat. He wants to make > sure that we use the latest revisions. > > So I#m very pleased to read that someone already set food on this terrain. > Qt5.4.1 is running and I installed PyQtdesingerplugins, in mind that they > were written for PyQt4. Are they usable in 5? I added the env-variables to > my bashrc, did get any changes shown in the designer. Of course I did a > re-log-in to start fresh, but any changes were noteable. > What possible ways of embedding matplotlib into a designer base pyqt5-gui > else, are there? > > cheers, > Christian > > > > -- > "A little learning never caused anyone's head to explode!" > > > "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" > > > > On Wednesday, February 18, 2015 11:59 PM, Ryan Nelson < > rne...@gm...> wrote: > > > Hello list, > > A couple months ago, I spent quite a bit of time trying to figure out how > to use Qt designer create a GUI with an embedded MPL window. Unfortunately, > the Scipy cookbook page ( > http://wiki.scipy.org/Cookbook/Matplotlib/Qt_with_IPython_and_Designer) > is very outdated. A recent post ( > http://matplotlib.1069221.n5.nabble.com/Re-Keep-list-of-figures-or-plots-and-flip-through-list-using-UI-td44961.html) > brought up some questions about a use case very similar to mine, so I redid > my example and was going to write a quick tutorial for the docs. > > Unfortunately, I'm not a Qt guru, so I thought that I would ask on the > list for some advice. The OP and I were both interested in being able to > have a list of figures that you could select from to change the plot > window. The embedding examples in the docs create subclasses of > FigureClass* and embed the plotting figure/axes/etc. This works but gets > tricky, though, when trying to switch plots. Also, for interactive IPython > work, I didn't like that the plotting objects were mixed in with all the > QtGui.QWidget attributes, which makes introspective searching painful. My > solution was to create a dictionary of matplotlib.figure.Figure objects > that had all of the plotting stuff defined. Then when I select a new plot > from the list, the old one is removed and a new FigureClass object is > created using the selected Figure object. Has anyone else successfully done > something like this? Is there a better way? Also, it seems if I zoom the > current plot, change to a new plot, and change back, the zoom region is > retained. Anyone know how to reset the zoom region? > > Attached is my example: "window.py" is the Designer-created main window > and "custommpl.py" is the subclass of the main window that I wrote. It's > about as short as I could make it. > > Thanks > > Ryan > > > > > ------------------------------------------------------------------------------ > 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=190641631&iu=/4140/ostg.clktrk > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > > > > ------------------------------------------------------------------------------ > 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 > > > > > ------------------------------------------------------------------------------ > 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 > > > > > ------------------------------------------------------------------------------ > 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: Benjamin R. <ben...@ou...> - 2015-04-15 14:03:38
|
"even they don't cover latest enhancements up to six month before print" In my defense, I was making updates at the last possible moment to cover changes in the latest release (1.4.3), and provided vague guidance on things to come, going so far as to replace references to a v1.5 release with v2.1. My book does not cover all of the backends, and I didn't explicitly cover Qt5 but only because I didn't have it installed on my system. By the way, qt_compat *is* the layer one should be targeting for Qt5. It makes one's application compatible with either PySide or PyQt5, and it provides the Qt5 interface. It is qt4_compat that is deprecated. If there is a second edition, I plan to greatly expand on the backends covered, but that probably won't be for another year, unfortunately. Cheers! Ben Root On Wed, Apr 15, 2015 at 3:49 AM, Christian Ambros <am...@ym...> wrote: > No offense, but it really is outdated. Consider that it'll take two years > to do the writing and the lecture work the research material is form 2007 > to 2008. We now are in 2015. As you can tell from other books which have > been published between 2013 and a really helpy book from March, 24th 2015 > (yes, Benjamin Root wrote it), even they don't cover latest enhancements up > to six month before print, (which might be seen a reasonable since changing > is easy in a digitized world like ours). > A good tutorial for the once, who do not have much experience in this > field (I count myself in with the just one and a half year of experience in > gui programming) is two things, actual up to six month to a year and > straight forward, meaning It tells you what to do and doesn't bother you > with design thoughts, API explanations nor tries to teach you programming. > I have that book in my possession, but it didn't turn out to be helpful if > you do not have the time do read it in whole. If you have the time to spin > freely, you still will have conquered 80% by yourself and because it is > still outdated for pyhton3 and matplotlib 1.4.3 the use is questionable. > > cheers, > Christian > > -- > "A little learning never caused anyone's head to explode!" > > > "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" > > > > On Wednesday, April 15, 2015 3:44 AM, Chris O'Halloran <cm...@gm...> > wrote: > > > Can I recommend this book. It was very helpful to me in figuring much of > this out. > > > https://www.packtpub.com/application-development/matplotlib-python-developers > > On 14 April 2015 at 18:14, Christian Ambros <am...@ym...> wrote: > > Hi Ryan, > > wow! This tutorial is one of the best I ever encountered. Nothing is > missing, nothing is cryptic or unclear. What I like best is, that it get's > along without using Qt Designer plugins or something similar strange. It's > a good basis to start. Maybe you should write a book, covering all the > untold things one needs to solve problems like that. I browsed through > plenty of books the last weeks and what really is missing, is a cookbook > about Qt Designer, Glade and wxWidgets and how to fill it with python3 and > it's lib's like matplotlib, pyqtgraph, numpy, sympy etc. > > I would buy it right away! > cheers, > Christian > > -- > "A little learning never caused anyone's head to explode!" > > > "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" > > > > On Friday, April 10, 2015 7:14 PM, Ryan Nelson <rne...@gm...> > wrote: > > > Christian, > > As it turns out, I wrote a blog post (for my terrible blog) about using > Designer to create a MPL based GUI ( > http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/). > I was going to write this up for the MPL docs... But it got really long (3 > parts), so I just used my personal site. It got so long because this was > the second time I needed to figure this out, and I wanted to make a very > detailed outline for my own future reference. Unfortunately, I don't have > any experience with Qt5, but I imagine things are similar. I think they > just rearranged the locations of some of the widgets, but I'd be curious to > hear your experience. I gave up on PyQtdesignerplugins. I think it makes > more sense to just use a generic widget as the MPL container. > > I would be very happy if you had comments for my Qt designer posts. > > Ryan > > On Wed, Apr 8, 2015 at 5:47 AM, Christian Ambros <am...@ym...> > wrote: > > Hi Ryan, > > could you write down, as a tutorial, how you built the example with the qt > designer? > In the last hours I read all most everything what can be found on the > issue of getting matplotlib running with pyqt5 and the designer but as you > realized yourself, there is little to be found handy. > > I'm stuck at a project, which has to use python3, and pyqt5 and am not > allowed by my boss to fall back to pyqt4 or qt_compat. He wants to make > sure that we use the latest revisions. > > So I#m very pleased to read that someone already set food on this terrain. > Qt5.4.1 is running and I installed PyQtdesingerplugins, in mind that they > were written for PyQt4. Are they usable in 5? I added the env-variables to > my bashrc, did get any changes shown in the designer. Of course I did a > re-log-in to start fresh, but any changes were noteable. > What possible ways of embedding matplotlib into a designer base pyqt5-gui > else, are there? > > cheers, > Christian > > > > -- > "A little learning never caused anyone's head to explode!" > > > "Ein wenig Lernen hat noch niemandens Kopf zum Explodieren gebracht!" > > > > On Wednesday, February 18, 2015 11:59 PM, Ryan Nelson < > rne...@gm...> wrote: > > > Hello list, > > A couple months ago, I spent quite a bit of time trying to figure out how > to use Qt designer create a GUI with an embedded MPL window. Unfortunately, > the Scipy cookbook page ( > http://wiki.scipy.org/Cookbook/Matplotlib/Qt_with_IPython_and_Designer) > is very outdated. A recent post ( > http://matplotlib.1069221.n5.nabble.com/Re-Keep-list-of-figures-or-plots-and-flip-through-list-using-UI-td44961.html) > brought up some questions about a use case very similar to mine, so I redid > my example and was going to write a quick tutorial for the docs. > > Unfortunately, I'm not a Qt guru, so I thought that I would ask on the > list for some advice. The OP and I were both interested in being able to > have a list of figures that you could select from to change the plot > window. The embedding examples in the docs create subclasses of > FigureClass* and embed the plotting figure/axes/etc. This works but gets > tricky, though, when trying to switch plots. Also, for interactive IPython > work, I didn't like that the plotting objects were mixed in with all the > QtGui.QWidget attributes, which makes introspective searching painful. My > solution was to create a dictionary of matplotlib.figure.Figure objects > that had all of the plotting stuff defined. Then when I select a new plot > from the list, the old one is removed and a new FigureClass object is > created using the selected Figure object. Has anyone else successfully done > something like this? Is there a better way? Also, it seems if I zoom the > current plot, change to a new plot, and change back, the zoom region is > retained. Anyone know how to reset the zoom region? > > Attached is my example: "window.py" is the Designer-created main window > and "custommpl.py" is the subclass of the main window that I wrote. It's > about as short as I could make it. > > Thanks > > Ryan > > > > > ------------------------------------------------------------------------------ > 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=190641631&iu=/4140/ostg.clktrk > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > > > > ------------------------------------------------------------------------------ > 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 > > > > > ------------------------------------------------------------------------------ > 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 > > > > > ------------------------------------------------------------------------------ > 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 > > |