From: Jean-Baptiste C. <Jea...@de...> - 2004-03-12 12:59:22
|
S=E6l ! Is there a way to "turn-off" lines without removing the data ? My goal is to hide some lines in a plot wihtout losing the data so I can sh= ow it again later. I can do=20 # Hide the line x=3Dline.get_xdata() y=3Dline.get_ydata() line.set_data([],[]) # Reset the line line.set_data(x,y) But I would prefer I more elegant way like line.hide() line.show() Would it be possible to get something like that ? Thanks Jean-Baptiste --=20 ----------------------------- Jea...@de... Department of Statistics deCODE genetics Sturlugata,8 570 2993 101 Reykjav=EDk |
From: John H. <jdh...@ac...> - 2004-03-12 19:10:39
Attachments:
artist.py
|
>>>>> "Jean-Baptiste" =3D=3D Jean-Baptiste Cazier <Jean-Baptiste.cazier@d= ecode.is> writes: Jean-Baptiste> S=E6l ! Is there a way to "turn-off" lines without Jean-Baptiste> removing the data ? My goal is to hide some lines Jean-Baptiste> in a plot wihtout losing the data so I can show it Jean-Baptiste> again later. I can do # Hide the line Jean-Baptiste> x=3Dline.get_xdata() y=3Dline.get_ydata() Jean-Baptiste> line.set_data([],[]) This can be done very easily (for any artist) with a minor modification of artist.py. The base class forewards all drawing to the derived classes so no other changes are required. Just replace artist.py with the attached file below and then you can do: from matplotlib.matlab import * x =3D arange(0.0, 1.0, 0.05) l1, l2 =3D plot(x, sin(2*pi*x), x, sin(4*pi*x)) l1.set_visible(False) show() |
From: Jean-Baptiste C. <Jea...@de...> - 2004-03-14 18:36:18
|
S=E6l ! Thanks for the change of the artist class. It should do exaclty what I want I modified artist accordingly (no more 'transform' defined ? I can run you example witout problem. But If I implement it in my program which is embedded within gtk with the o= bject_picker, it does not work: If I try to set_visible on lines I just define with plot I get an error mes= sage Traceback (most recent call last): File "./novi.py", line 604, in ? main() File "./novi.py", line 576, in main MaxP =3D plot_Haps(canvas, map, Haps) File "./novi.py", line 367, in plot_Haps line =3D plot_hap(canvas, map, h, sym[s]) File "./novi.py", line 389, in plot_hap line.set_visible(Plot.False) AttributeError: 'list' object has no attribute 'set_visible' And this happens even if I redo the full installation of matplotlib 0.51: ... not copying matplotlib/__init__.py (output up-to-date) not copying matplotlib/_matlab_helpers.py (output up-to-date) not copying matplotlib/afm.py (output up-to-date) copying matplotlib/artist.py -> build/lib/matplotlib not copying matplotlib/axes.py (output up-to-date) not copying matplotlib/axis.py (output up-to-date) ... running install_lib not copying build/lib/matplotlib/__init__.py (output up-to-date) not copying build/lib/matplotlib/_matlab_helpers.py (output up-to-date) not copying build/lib/matplotlib/afm.py (output up-to-date) copying build/lib/matplotlib/artist.py -> /usr/lib/python2.2/site-packages/= matplotlib not copying build/lib/matplotlib/axes.py (output up-to-date) not copying build/lib/matplotlib/axis.py (output up-to-date) not copying build/lib/matplotlib/backend_bases.py (output up-to .... skipping byte-compilation of /usr/lib/python2.2/site-packages/matplotlib/_m= atlab_helpers.py to _matlab_helpers.pyc skipping byte-compilation of /usr/lib/python2.2/site-packages/matplotlib/af= m.py to afm.pyc byte-compiling /usr/lib/python2.2/site-packages/matplotlib/artist.py to art= ist.pyc skipping byte-compilation of /usr/lib/python2.2/site-packages/matplotlib/ax= es.py to axes.pyc skipping byte-compilation of /usr/lib/python2.2/site-packages/matplotlib/ax= is.py to axis.pyc ... This is my routine: def plot_hap(canvas, map, h , symbol, size=3DNone): """ plot the specific haplotype """ lh=3Dlen(h.haplist) Xrange=3D[map[m] for m in [y for x,y in h.haplist]] Yrange=3D[-math.log10(h.pval) for i in range(lh)] line=3Dcanvas.figure.axes[0].plot(Xrange, Yrange, symbol) line.set_visible(Plot.False) return line Any idea ? Thanks Jean-Baptiste On Fri, 12 Mar 2004 12:29:18 -0600 John Hunter <jdh...@ni...> wrote: > >>>>> "Jean-Baptiste" =3D=3D Jean-Baptiste Cazier <Jean-Baptiste.cazier@d= ecode.is> writes: >=20 > Jean-Baptiste> S=E6l ! Is there a way to "turn-off" lines without > Jean-Baptiste> removing the data ? My goal is to hide some lines > Jean-Baptiste> in a plot wihtout losing the data so I can show it > Jean-Baptiste> again later. I can do # Hide the line > Jean-Baptiste> x=3Dline.get_xdata() y=3Dline.get_ydata() > Jean-Baptiste> line.set_data([],[]) >=20 > This can be done very easily (for any artist) with a minor > modification of artist.py. The base class forewards all drawing to > the derived classes so no other changes are required. Just replace > artist.py with the attached file below and then you can do: >=20 > from matplotlib.matlab import * >=20 > x =3D arange(0.0, 1.0, 0.05) > l1, l2 =3D plot(x, sin(2*pi*x), x, sin(4*pi*x)) > l1.set_visible(False) > show() >=20 >=20 --=20 ----------------------------- Jea...@de... Department of Statistics deCODE genetics Sturlugata,8 570 2993 101 Reykjav=EDk |
From: John H. <jdh...@ac...> - 2004-03-14 19:48:39
|
>>>>> "Jean-Baptiste" == Jean-Baptiste Cazier <Jea...@de...> writes: lh=len(h.haplist) Xrange=[map[m] for m in [y for x,y in h.haplist]] Yrange=[-math.log10(h.pval) for i in range(lh)] line=canvas.figure.axes[0].plot(Xrange, Yrange, symbol) line.set_visible(Plot.False) Jean-Baptiste> Any idea ? plot always return *a list* of lines. So you need to do lines = canvas.figure.axes[0].plot(Xrange, Yrange, symbol) lines[0].set_visible(Plot.False) # get the first element of the list JDH |
From: Jean-Baptiste C. <Jea...@de...> - 2004-03-15 10:02:13
|
It workls great now ! Thanks Jean-Baptiste On Sun, 14 Mar 2004 13:26:20 -0600 John Hunter <jdh...@ni...> wrote: > >>>>> "Jean-Baptiste" =3D=3D Jean-Baptiste Cazier <Jean-Baptiste.cazier@d= ecode.is> writes: >=20 > lh=3Dlen(h.haplist) > Xrange=3D[map[m] for m in [y for x,y in h.haplist]] > Yrange=3D[-math.log10(h.pval) for i in range(lh)] > line=3Dcanvas.figure.axes[0].plot(Xrange, Yrange, symbol) > line.set_visible(Plot.False) >=20 > Jean-Baptiste> Any idea ? >=20 > plot always return *a list* of lines. So you need to do >=20 > lines =3D canvas.figure.axes[0].plot(Xrange, Yrange, symbol) > lines[0].set_visible(Plot.False) # get the first element of the list >=20 > JDH --=20 ----------------------------- Jea...@de... Department of Statistics deCODE genetics Sturlugata,8 570 2993 101 Reykjav=EDk |
From: matthew a. <ma...@ca...> - 2004-03-16 07:01:52
|
I can't seem to get multiple plots to draw on the same figure under TkAgg. In the below example, the cos() doesn't show up, and the tan produces an error. This seems to be repeatable for arbitrary cases of trying to plot 2 or 3 lines together on the one plot. Cheers and thanks for matplotlib, Matthew. $ python Python 2.2.2 (#1, Feb 24 2003, 19:13:11) [GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from matplotlib.matlab import * >>> xx = arange(0, 3, 0.1) >>> plot(sin(xx)) [<matplotlib.lines.Line2D instance at 0x819613c>] >>> plot(cos(xx)) [<matplotlib.lines.Line2D instance at 0x8636444>] >>> plot(tan(xx)) Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/lib/python2.2/site-packages/matplotlib/matlab.py", line 788, in plot draw_if_interactive() File "/usr/lib/python2.2/site-packages/matplotlib/backends/backend_tkagg.py", line 46, in draw_if_interactive figManager.show() File "/usr/lib/python2.2/site-packages/matplotlib/backends/backend_tkagg.py", line 127, in show self.canvas.draw() File "/usr/lib/python2.2/site-packages/matplotlib/backends/backend_agg.py", line 334, in draw self.figure.draw(self.renderer) File "/usr/lib/python2.2/site-packages/matplotlib/artist.py", line 79, in draw self._draw(renderer, *args, **kwargs) File "/usr/lib/python2.2/site-packages/matplotlib/figure.py", line 81, in _draw for a in self.axes: a.draw(renderer) File "/usr/lib/python2.2/site-packages/matplotlib/artist.py", line 79, in draw self._draw(renderer, *args, **kwargs) File "/usr/lib/python2.2/site-packages/matplotlib/axes.py", line 493, in _draw line.draw(renderer) File "/usr/lib/python2.2/site-packages/matplotlib/artist.py", line 79, in draw self._draw(renderer, *args, **kwargs) File "/usr/lib/python2.2/site-packages/matplotlib/lines.py", line 177, in _draw gc.set_foreground(self._color) File "/usr/lib/python2.2/site-packages/matplotlib/backend_bases.py", line 230, in set_foreground self._rgb = colorConverter.to_rgb(fg) File "/usr/lib/python2.2/site-packages/matplotlib/colors.py", line 82, in to_rgb error_msg(msg) NameError: global name 'error_msg' is not defined >>> |
From: John H. <jdh...@ac...> - 2004-03-16 13:07:07
|
>>>>> "matthew" == matthew arnison <ma...@ca...> writes: matthew> I can't seem to get multiple plots to draw on the same matthew> figure under TkAgg. In the below example, the cos() matthew> doesn't show up, and the tan produces an error. This matthew> seems to be repeatable for arbitrary cases of trying to matthew> plot 2 or 3 lines together on the one plot. Found and fixed. This crept into the functions that process plot arguments when I added matplotlibrc support there. In axes.py, search for def _plot_1_arg and replace the first part of it with def _plot_1_arg(self, y, **kwargs): if self.count==0: color = self.firstColor else: color = self.colors[int(self.count % self.Ncolors)] ^^^ this is the critical part matthew> Cheers and thanks for matplotlib, Matthew. Thanks for the bug report! JDH |
From: matthew a. <ma...@ca...> - 2004-03-29 08:02:19
|
Hi Just a quick note that the EPS bounding box still seems to be buggy in matplotlib 0.52. If I save an EPS using the save button on a GTK figure window, the right hand side gets slightly clipped when printed. If I do the same from a TkAgg window, most of the plot gets clipped. Cheers, Matthew. |