Re: [Matplotlib-users] show() not returning when figure closed if function called from another module
On Thu, 2008-01-10 at 14:10 +0100, Henry Proudhon wrote: Hi Matplotlib users, I'm experiencing some problems when closing a figure (I'm using matplotlib 0.91.0). the function is working correctly when invoked inside the module where it is defined: from pylab import * def test(): t = arange(0.0, 1.0+0.01, 0.01) s = cos(2*2*pi*t) plot(t, s, '-', lw=2) show() print 'after show' if __name__ == '__main__': print test() now if I call test() from another module, the figure closes but show() does not return ('after show' does not get printed) so the execution is stuck. Can somebody shed some light here, I'm really missing something... Thanks a lot Henry In case somebody has the same problem, I worked around this by embedding a matplotlib figure in a gtk window but it's a lot heavier. Henry - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] (no subject)
I've committed these changes to matplotlib SVN, and it should make it into the next release of 0.91.x, if we decide to make one. You may be right that Qt's SVG support is iffy (I don't know enough about the spec to be sure, so I'm not conceding that), but either way it doesn't bother me to make changes that help SVG work in more places. It's like all those pragmatic web developers who have to make things work with IE... Thanks for your help. I'll try to get the Qt SVG demo installed here so I can test with that the next time our SVG code changes. Cheers, Mike Christiaan Putter wrote: Hi Michael, Sorry for getting back to you only now, and thanks for the help. If you have Qt installed there should be an sample Svg viewer app in the examples somewhere. If you'd like I can send it to you somehow, just let me know. I tested the new .svg you sent me it's rendering the same in Firefox and Qt. So it works. Once again thanks for your help and let me know if I can send you something to help with testing in Qt. Personally I think Qt's support for svg is still a bit iffy. Have a nice, Christiaan On 04/01/2008, *Michael Droettboom* [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote: Can you please test the attached SVG file? Cheers, Mike Michael Droettboom wrote: Between 0.90 and 0.91, the SVG backend was changed to store the glyph outlines of the characters in the SVG file itself. (This is on by default, but can be turned off with the rc parameter svg.embed_char_paths). This helps make the SVG files much more portable, as the need to install the math fonts has long been a FAQ on this list. I've been doing all my testing with Firefox and Inkscape. Is there a simple Qt-based SVG viewer I could add to my testing regimen? I won't pretend to be an expert on the SVG spec, but it does say this: http://www.w3.org/TR/SVG/struct.html#Head To provide some SVG user agents with an opportunity to implement efficient implementations in streaming environments, creators of SVG content are encouraged to place all elements which are targets of local URI references within a 'defs' element which is a direct child of one of the ancestors of the referencing element. For example: ?xml version=1.0 standalone=no? !DOCTYPE svg PUBLIC -//W3C//DTD SVG 1.1//EN http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd; svg width=8cm height=3cm xmlns=http://www.w3.org/2000/svg; descLocal URI references within ancestor's 'defs' element./desc defs linearGradient id=Gradient01 stop offset=20% stop-color=#39F / stop offset=90% stop-color=#F3F / /linearGradient /defs rect x=1cm y=1cm width=6cm height=1cm fill=url(#Gradient01) / !-- Show outline of canvas using 'rect' element -- rect x=.01cm y=.01cm width=7.98cm height= 2.98cm fill=none stroke=blue stroke-width=.02cm / /svg View this example as SVG (SVG-enabled browsers only) In the document above, the linear gradient is defined within a 'defs' element which is the direct child of the 'svg' element, which in turn is an ancestor of the 'rect' element which references the linear gradient. Thus, the above document conforms to the guideline. So we are complying to that part of the spec. The spec doesn't seem to say anything about whether the defs must appear before or after their use -- but maybe I just can't find the relevant paragraph. In any case, this should be easy enough to fix on matplotlib's end, and certainly won't break compliance with the spec. I'll have a look, and may come back to you for help with testing with Qt if you don't mind. Cheers, Mike Christiaan Putter wrote: Hi there, Just an update regarding the svg problem I was having: I simply went back to 0.90 and that's working now. Would still be nice to know if the svg output from matplotlib complies with the standard or whether it's Qt that's messing things up. Merry x-mass! cputter On 21/12/2007, *Christiaan Putter* [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] mailto: [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote: Hi guys and girls, Quick question regarding matplotlib's svg backend... I've embeded pyhton into c++ and Qt's (4.3.3) svg support is having some problems with .svg files created by matplotlib. Text
Re: [Matplotlib-users] matplotlib/__init__.py
On Monday 14 January 2008 02:27:28 am Tom Johnson wrote: I was looking at rc_params() and saw if not os.path.exists(fname): message = 'could not find rc file; returning defaults' ret = dict([ (key, tup[0]) for key, tup in defaultParams.items()]) warnings.warn(message) return ret Is this correct? It seems that it returns a regular dictionary rather than an instance of RcParams. You have a sharp eye. It is incorrect, but it turns out that block of code is never executed (unless the user deletes the default rc file from site-packages/matplotlib/mpl-data). But I changed it in the trunk to return an RcParams object. Thanks for the report. Darren - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Matplotlib-users] Weibull plot
Hi, I need to make some Weibull analysis and I wanted to make it with numpy and scipy. Theses analysis are based on Weibull plots : - on X, time values are reported according to a log scale - on Y, probability (F) is reported according to a special scale, which lets Weibull random variables fit on a line. So the pair (t, F) should be plotted on ( ln(t), ln( -ln(1-F)) ) You can find an example of weibull plot here : http://www.itl.nist.gov/div898/handbook/eda/section3/weibplot.htm Here is my way to make weibull plot with matplotlib : [code] from numpy import * from matplotlib.ticker import FuncFormatter import pylab as p # I'm used to the ln notation for the natural log from numpy import log as ln # Paramters beta = 5.2 eta = 12 # Genrate 10 numbers following a Weibull distribution x = eta *random.weibull(beta, size=10) F = 1 - exp( -(x/eta)**beta ) # Estimate Weibull parameters lnX = ln(x) lnF = ln( -ln(1-F) ) a, b = polyfit(lnF, lnX, 1) beta0 = 1/a eta0 = exp(b) # ideal line F0 = array([1e-3, 1-1e-3]) x0 = eta0 * (-ln(1-F0))**(1/beta0) lnF0 = ln(-ln(1-F0)) # Weibull plot p.figure() ax = p.subplot(111) p.semilogx(x, lnF, bs) p.plot(x0, lnF0, 'r-', label=beta= %5G\neta = %.5G % (beta0, eta0) ) p.grid() p.xlabel('x') p.ylabel('Cumulative Distribution Function') p.legend(loc='lower right') # ticks def weibull_CDF(y, pos): return %G %% % (100*(1-exp(-exp(y formatter = FuncFormatter(weibull_CDF) ax.yaxis.set_major_formatter(formatter) yt_F = array([ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99]) yt_lnF = ln( -ln(1-yt_F)) p.yticks(yt_lnF) p.show() [/code] This works, but I 'm pretty sure this could be improved : 1) Is there a way to use matplotlib.transforms to handle the convertion between F and y=ln(-ln(1-F)) ? 2) I would like to have vertical lines for major and minor ticks. How can I do that ? 3) In this case, the log notation for the X axis is not pertinent. How could I switch to a more common floating point notation ? Any hints ? Thanks -- LB - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] IOError: [Errno 2] No such file or directory: 'etopo20data.gz'
j. vickroy wrote: Hello, I am a first-time user of matplotlib. When trying to run the plotmap.py example, the following traceback is generated: plotmap.py Traceback (most recent call last): File C:\Documents and Settings\jim.vickroy\My Documents\Projects\High-latitudes D-region\plotmap.py, line 13, in module topoin = load('etopo20data.gz') File C:\Python25\Lib\site-packages\matplotlib\mlab.py, line 1252, in load fh = cbook.to_filehandle(fname) File C:\Python25\Lib\site-packages\matplotlib\cbook.py, line 236, in to_filehandle fh = gzip.open(fname, flag) File C:\Python25\lib\gzip.py, line 49, in open return GzipFile(filename, mode, compresslevel) File C:\Python25\lib\gzip.py, line 95, in __init__ fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb') IOError: [Errno 2] No such file or directory: 'etopo20data.gz' How do I obtain this file and where should it reside? I have downloaded proj446_win32_bin.zip and unzipped it, but I do not see any such file. I have also attempted to search this user-group archive for references to etopo20data.gz but repeatedly get an Unable to connect to Search Server error so I do not know what I'm doing incorrectly. I have installed: - matplotlib-0.91.2.win32-py2.5.exe - basemap-0.9.9.1.win32-py2.5.exe - httplib2-0.4.0.zip for use with Python 2.5.1. I apologize if this has been previously addressed. Thanks, -- jv It's in the examples directory of the basemap source tarball (basemap-0.9.9.1.tar.gz). The examples directory is not included with the binary installers. -Jeff -- Jeffrey S. Whitaker Phone : (303)497-6313 Meteorologist FAX: (303)497-6449 NOAA/OAR/PSD R/PSD1Email : [EMAIL PROTECTED] 325 BroadwayOffice : Skaggs Research Cntr 1D-124 Boulder, CO, USA 80303-3328 Web: http://tinyurl.com/5telg - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Matplotlib-users] IOError: [Errno 2] No such file or directory: 'etopo20data.gz'
Hello, I am a first-time user of matplotlib. When trying to run the plotmap.py example, the following traceback is generated: plotmap.py Traceback (most recent call last): File C:\Documents and Settings\jim.vickroy\My Documents\Projects\High-latitudes D-region\plotmap.py, line 13, in module topoin = load('etopo20data.gz') File C:\Python25\Lib\site-packages\matplotlib\mlab.py, line 1252, in load fh = cbook.to_filehandle(fname) File C:\Python25\Lib\site-packages\matplotlib\cbook.py, line 236, in to_filehandle fh = gzip.open(fname, flag) File C:\Python25\lib\gzip.py, line 49, in open return GzipFile(filename, mode, compresslevel) File C:\Python25\lib\gzip.py, line 95, in __init__ fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb') IOError: [Errno 2] No such file or directory: 'etopo20data.gz' How do I obtain this file and where should it reside? I have downloaded proj446_win32_bin.zip and unzipped it, but I do not see any such file. I have also attempted to search this user-group archive for references to etopo20data.gz but repeatedly get an Unable to connect to Search Server error so I do not know what I'm doing incorrectly. I have installed: - matplotlib-0.91.2.win32-py2.5.exe - basemap-0.9.9.1.win32-py2.5.exe - httplib2-0.4.0.zip for use with Python 2.5.1. I apologize if this has been previously addressed. Thanks, -- jv - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Matplotlib-users] x axis alignment with bar graph
I have some code that produces a series of graphs of data over time. For the most part it works well, but for certain combinations of dates the two plots do not line up, due to the width of the bars in the first subplot. What is the best way for force my second subplot's x axis to be identical to that of the first subplot? Thanks! Here is minimal code reproducing the problem: import matplotlib from datetime import * import time from pylab import * def toOrd(strDate): return datetime(*time.strptime(strDate,%m/%d/%y)[0:5]).toordinal() def main(): startDate = toOrd(05/24/05) endDate = toOrd(11/21/06) dates = range(startDate,endDate,7) figure(1) axis = subplot(211,axisbelow=True) plot_date(dates,dates,visible = False) axis.bar(dates,dates, width=3.0) axis = subplot(212,axisbelow=True) plot_date(dates,dates) #,'-',color = priceColor) show() if __name__ == '__main__': main() - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Matplotlib-users] re sizing behaviour like in Mircrocal Origin
I integrated mpl into my wxPython application for plotting simple lines. I would like my canvas to behave differently when the containing window is being resized. At the moment all text, all lines, all markers, the legend... remain in the same state (same size and thickness) regardless whether the plot is small or big. As a result the plot looks fine at one size only. I need all elements to be resized with the window just like it happens in Microcal's scientific plotting software origin. Everything should resize as a whole. Also, it would be great to keep the aspect ratio of the plot when resizing and zooming. I could not figure out how to do that. Using methods like apply_aspect and set_adjustable is not enough. Is there a way to make those things work? Thanks, Jurgen -- View this message in context: http://www.nabble.com/resizing-behaviour-like-in-Mircrocal-Origin-tp14814996p14814996.html Sent from the matplotlib - users mailing list archive at Nabble.com. - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] re sizing behaviour like in Mircrocal Origin
DaFudl wrote: I integrated mpl into my wxPython application for plotting simple lines. I would like my canvas to behave differently when the containing window is being resized. At the moment all text, all lines, all markers, the legend... remain in the same state (same size and thickness) regardless whether the plot is small or big. As a result the plot looks fine at one size only. I need all elements to be resized with the window just like it happens in Microcal's scientific plotting software origin. Everything should resize as a whole. I think what you're asking for would require a pretty major overhaul of matplotlib. The fact that all the text etc. remains the same size is a deliberate design decision, and actually requires a lot more work to make fast enough, since a lot more must be recalculated with each redraw, rather than just multiplying everything by a scale factor. All that said, you could experiment with rendering to a vector format (e.g. Pdf or Svg) and then have wxPython render it directly with each window resize. (This would be much the same way that resizing a PDF generated by matplotlib in Acrobat Reader scales everything as a whole). Alternatively, you could try using a backend (e.g. Cairo) that allows you to push a global affine transformation onto the transformation stack. (At present, the Agg backends don't have that functionality -- but it could be added, especially since the recent overhaul of transformations in general in matplotlib.) That way, you could tell the underlying rendering engine (below matplotlib) to scale everything up and down for any subsequent commands it receives from matplotlib. But, anyway you slice it, I think you're looking at getting your hands dirty in some matplotlib internals. I'm happy to help if you want to work through it, but I don't think I would have time myself. Also, it would be great to keep the aspect ratio of the plot when resizing and zooming. I could not figure out how to do that. Using methods like apply_aspect and set_adjustable is not enough. That seems to be easy enough to do in the window resize callback -- just programmatically force-resize the window to the desired aspect ratio. Cheers, Mike -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] re sizing behaviour like in Mircrocal Origin
On Jan 14, 2008 3:55 PM, Michael Droettboom [EMAIL PROTECTED] wrote: I think what you're asking for would require a pretty major overhaul of matplotlib. The fact that all the text etc. remains the same size is a matplotlib is designed to scale in the way Jurgen requests with DPI (eg fonts, line thicknesses and the like scale with DPI). In [65]: fig = figure() In [66]: plot([1,2,3]) Out[66]: [matplotlib.lines.Line2D instance at 0xbf965ec] In [67]: fig.dpi.set(200) In [68]: fig.canvas.draw() with a little work, one could hook into the resize mechanism to increase the dpi to create the desired effect w/o a major overhaul. By default what happens is the width and height in inches are changed with a resize but the dpi is held constant. One could trick matplotlib by computing a new width, height in inches, and a new dpi so that the resized canvas width in pixels is the requested size based on the resize event but the dpi is increased to create the microcal effect JDH - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] re sizing behaviour like in Mircrocal Origin
Jurgen, I generally lurk on the list, but I'll speak up now since I have basically done what you are talking about. I integrated MPL (TkAgg) into an existing application that resizes (PyRAF). The path I chose isn't particularly pretty, but it does the job and sounds like it might be flexible enough for what you are doing. I created an adapter class which wraps the MPL calls. The adapter is what the existing application calls to make plots instead of calling MPL directly. The adapter also keeps a normalized (0-1) copy of all plot data arrays (and any lines and other items). When the canvas is resized, I go through all my lines (Line2D), patches (Rectangle), and text, and scale each based on the new canvas dimensions. Then the new items are inserted directly into the Figure object, replacing the old values. This resizes everything so that it is correct when redrawn. I was initially concerned about performance, but the resizings are very smooth (thanks matplotlib!). You could also enforce an aspect ratio this way. I had to write this adapter not because of the resizing issue, but due to the constraints of the existing application with which I was working. It did however make resizing easy. As long as your plotted items are relatively simple (lines, patches, text), this works very well. Using more complicated items like legends would not work as well unless you either allowed them to stay a static size or manually composed them of simpler objects. In general, this idea is probably more work than John's DPI suggestions. Chris - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] re sizing behaviour like in Mircrocal Origin
Doh! Why didn't I think of that? Mike John Hunter wrote: On Jan 14, 2008 3:55 PM, Michael Droettboom [EMAIL PROTECTED] wrote: I think what you're asking for would require a pretty major overhaul of matplotlib. The fact that all the text etc. remains the same size is a matplotlib is designed to scale in the way Jurgen requests with DPI (eg fonts, line thicknesses and the like scale with DPI). In [65]: fig = figure() In [66]: plot([1,2,3]) Out[66]: [matplotlib.lines.Line2D instance at 0xbf965ec] In [67]: fig.dpi.set(200) In [68]: fig.canvas.draw() with a little work, one could hook into the resize mechanism to increase the dpi to create the desired effect w/o a major overhaul. By default what happens is the width and height in inches are changed with a resize but the dpi is held constant. One could trick matplotlib by computing a new width, height in inches, and a new dpi so that the resized canvas width in pixels is the requested size based on the resize event but the dpi is increased to create the microcal effect JDH -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] re sizing behaviour like in Mircrocal Origin
Michael Droettboom wrote: All that said, you could experiment with rendering to a vector format (e.g. Pdf or Svg) and then have wxPython render it directly with each window resize. If you did want to go that route, someone wrote a SVG renderer for wxPython -- search the wxpython-users list to find it. I do question why you want this -- MPLs current behavior generally makes the most sense -- you generally want the same font sizes and line thicknesses in a GUI app regardless of how large your Window is. Unless you really need it to look that same as it would on paper, for instance. -Chris -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/ORR(206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception [EMAIL PROTECTED] - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] Problem installing 0.91.2 egg on OS X 10.4
In article [EMAIL PROTECTED], Charlie Moad [EMAIL PROTECTED] wrote: I have replaced the binary with a working version. I'm running into an odd issue with that version (at least). If I unzip the egg and run easy_install on it it ends up in site-packages with odd permissions: % pwd /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-pack ages % ls -l drwx-- 9 rowen admin 306 Jan 14 16:59 matplotlib-0.91.2-py2.5-macosx-10.3-fat.egg The permissions inside look normal so this is easy to fix with chmod, but it seems strange. Any idea if I am doing something wrong or if something is wrong with the package? -- Russell - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Matplotlib-users] xlim changes without explicit calling of set_xlim
Hi, all I found a problem about xlim. It sometimes changes when there is no explicit calling of set_xlim. My application scenario is : at some situation replot the second one of two subplots, which shares x axis with the first one. To finish the replot operation, i first use clear() method to remove the previous image, and then plot a new one. The problem is that, there is an 'unexpected' change of xlim. The attached code is tried to reproduce the problem. I'm sorry for that it is not small enough and that it even seems ugly. But after all, the problem can be showed by it. Its text output simply shows the 'unexpected' changes. As it can be seen, plot operation causes change of xlim. While, i'd like to see that xlim changes only when responding to call ing set_xlim(). What's the possible reason? How should i do to avoid the unexpected change? As the sample code shows, the unexpected change can be reverted by calling set_xlim(). but this solution doesn't seem a graceful one. Thank you for your any help. -- sunzen freedom enjoyment #!/usr/bin/env python # # import gtk from matplotlib.figure import Figure from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar from matplotlib.numerix import * from matplotlib.ticker import FuncFormatter class BaseView(FigureCanvas): def __init__(self, numgraphs = 2): self.axlist = [] self.fig = Figure() self.axlist.append(self.fig.add_subplot(numgraphs, 1 ,1)) for i in range(2, numgraphs + 1): self.axlist.append(self.fig.add_subplot(numgraphs, 1 ,i, sharex = self.axlist[0],autoscale_on = False)) FigureCanvas.__init__(self, self.fig) for ax in self.axlist: self.set_formatter(ax) def set_formatter(self,ax): def formatter_b(x, pos = None): nano = long(x) return str(nano) xmajorFormatter = FuncFormatter(formatter_b) axis = ax.get_xaxis() axis.set_major_formatter(xmajorFormatter) class ViewOne(BaseView): def __init__(self): dxlim = (0,3797217271) BaseView.__init__(self, numgraphs = 2) self.axlist[0].set_xlim(dxlim) xlim = self.axlist[0].get_xlim() print initial xlim , xlim self.axlist[1].set_ylim(0,3) ts = (0, 200, 3000, 40, 30,3797217271) y1 = (1, 1, 1,1,1,1) y2 = (0,1,1,1,0,1) self.axlist[0].plot(ts,y1,picker = 5) self.axlist[1].plot(ts,y2,picker = 5) xlim = self.axlist[0].get_xlim() print xlim after plotting, xlim if xlim != dxlim: self.axlist[1].set_xlim(dxlim) print reset xlim for plotting causes change def replot_ax2(self): self.axlist[1].clear() dxlim = (0,3797217271) xlim = self.axlist[1].get_xlim() print xlim after clear operation, xlim if xlim != dxlim: self.axlist[1].set_xlim(dxlim) print reset xlim for clear causes change? ts = (0, 200, 3000, 40, 30,3797217271) y1 = (1, 2, 1,2,1,2) self.set_formatter(self.axlist[1]) self.axlist[1].plot(ts,y1,picker = 5) xlim = self.axlist[0].get_xlim() print xlim after replotting, xlim if xlim != dxlim: self.axlist[1].set_xlim(dxlim) print reset xlim for replotting causes change self.draw() class testapp(): def __init__(self): self.window = gtk.Window() self.window.set_default_size(800,600) self.nb = gtk.Notebook() self.window.add(self.nb) self.vbox = gtk.VBox() self.view = ViewOne() self.vbox.pack_start(self.view, True, True, 0) navbar = NavigationToolbar(self.view, self.window) self.vbox.pack_start(navbar, False, False,0) self.nb_label0 = gtk.Label(page0) self.nb.append_page(self.vbox,self.nb_label0) self.view.mpl_connect('pick_event', self.onpick) def main(self): self.window.show_all() gtk.main() def onpick(self,event): picked_axes = event.mouseevent.inaxes if picked_axes == self.view.axlist[0]: pass else: self.view.replot_ax2() if __name__ == __main__: app = testapp() app.main() - Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users