[Matplotlib-users] importing basemap then shapely causes error
I've asked this question on GIS stack exchange site, but thought it would be good to post here too. The SE question is here: http://gis.stackexchange.com/questions/50394/importing-matplotlib-basemap-and-shapely I have a python script that uses matplotlib's basemap and another part that uses shapely to do an intersection of 2 polygons. If basemap is imported before shapely and I run the intersection I get this exception: | intersect_poly= grid_poly.intersection(data_poly) File "/sw/lib/python2.7/site-packages/shapely/geometry/base.py", line334, in intersection return geom_factory(self.impl['intersection'](self, other)) File "/sw/lib/python2.7/site-packages/shapely/topology.py", line53, in __call__ "This operation produced a null geometry. Reason: unknown") shapely.geos.TopologicalError: This operation produced a null geometry. Reason: unknown| If I import shapely first, everything works fine. I would assume this is because of some "funkiness" in the way they are accessing the GEOS library. I've checked that in both situations the same library file is loaded in shapely ("print shapely.geos._lgeos"). Does anyone have an idea as to why this is happening and if there is a right way of doing this? Does this happen for anyone else? In the mean time I can just make sure to import shapely first (not sure if that affects basemap yet). Otherwise maybe I'll skim through the basemap source. I'm using OSX(10.7) with a fink install that has "libgeos3.3.3-shlibs", "libgeos3.3.1-shlibs", "libgeos3.3.1", "libgeos3.3.0-shlibs", "libgeos3.3.0", and "shapely-py27 (1.2.16-1)" installed. The current basemap version in fink is 1.0.2. And here's a simple test script that reproduces the problem (flip the imports and it works): |from mpl_toolkitsimport basemap from shapelyimport geometry g_ring= [(-88.462425, 26.992203), (-57.847187, 26.992203), (-57.847187, 17.599869), (-88.462425, 17.599869), (-88.462425, 26.992203)] grid_g_ring= [(-123.044, 59.8440001), (-49.3849998, 57.2890001), (-65.0909994, 14.3350001), (-113.133, 16.369), (-123.044, 59.8440001)] data_poly= geometry.Polygon(g_ring) grid_poly= geometry.Polygon(grid_g_ring) print grid_poly.intersection(data_poly).area| Thanks again. Please CC me in any replies. -Dave -- Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] cross correlation
Sudheer, For the documentation you are looking for print ax1.xcorr.__doc__ (Paul tried to give you the IPython method of getting that documentation which is by typing a ? (or ??) after the desired object.) In the documentation (at the link you gave http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xcorr), it says that there are three objects returned by xcorr: Return value is a tuple (*lags*, *c*, *line*) where: - *lags* are a length ``2*maxlags+1`` lag vector - *c* is the ``2*maxlags+1`` auto correlation vector - *line* is a :class:`~matplotlib.lines.Line2D` instance returned by :func:`~matplotlib.pyplot.plot`. So the error you were getting is due to the fact that you have only specified two variables to hold the three returned objects. Try: lags,c,line = ax1.xcorr . (Note that you have xcorr and lags backwards in your attempt.) -Sterling On Feb 8, 2013, at 1:56AM, Sudheer Joseph wrote: > Thank you verymuch Hobson, > However I think I did not understand > the suggestion by you fully( pardon my ignorance). I use the below test code > from matplotlib site. How does one make a call to get lags and correlation > corresponding to the x and y values in the plot. a Print command of > In [23]: print ax1.xcorr > 0x44c1410>> > results as above. Is it possible to assign the xcorr,lags=ax1.xcorr(x, y, > usevlines=True, maxlags=50, normed=True, lw=2) ? with a different syntax? I > get below error when I try the above . > In [27]: xcorr,lags=ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, > lw=2) > --- > ValueErrorTraceback (most recent call last) > /home/sjo/work/PY_WORK/stats/ in () > > 1 xcorr,lags=ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, > lw=2) > > ValueError: too many values to unpack > > > > import matplotlib.pyplot as plt > import numpy as np > x,y = np.random.randn(2,100) > fig = plt.figure() > ax1 = fig.add_subplot(211) > ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2) > ax1.grid(True) > ax1.axhline(0, color='black', lw=2) > ax2 = fig.add_subplot(212, sharex=ax1) > ax2.acorr(x, usevlines=True, normed=True, maxlags=50, lw=2) > ax2.grid(True) > ax2.axhline(0, color='black', lw=2) > plt.show() > > > From: Paul Hobson > To: Sudheer Joseph > Cc: "matplotlib-users@lists.sourceforge.net" > > Sent: Thursday, 7 February 2013 10:31 PM > Subject: Re: [Matplotlib-users] cross correlation > > > > > On Thu, Feb 7, 2013 at 3:24 AM, Sudheer Joseph > wrote: > Dear Users, > I am relatively new to Matplotlib. I wanted to find cross > correlation between 2 time series for my research and was looking at options > available with python and found > http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xcorr . However I > wanted to save the results in a netcdf file for further use. ie the > correlation, lags and significance if possible. Is there a way to get the > corr and lags from the axis.xcorr ?? any help in this matter will be greatly > appreciated. > Sudheer > > Sudheer, > > A call to axes.xcorr returns the lags, correlation (from np.correlate) and > the line artists on the figure. > > In IPython, doing "plt.xcorr??" should provide sufficient information. It's a > pretty simple method. > -paul > > > -- > Free Next-Gen Firewall Hardware Offer > Buy your Sophos next-gen firewall before the end March 2013 > and get the hardware for free! Learn more. > http://p.sf.net/sfu/sophos-d2d-feb___ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] cross correlation
Thank you verymuch Hobson, However I think I did not understand the suggestion by you fully( pardon my ignorance). I use the below test code from matplotlib site. How does one make a call to get lags and correlation corresponding to the x and y values in the plot. a Print command of In [23]: print ax1.xcorr > results as above. Is it possible to assign the xcorr,lags=ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2) ? with a different syntax? I get below error when I try the above . In [27]: xcorr,lags=ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2) --- ValueError Traceback (most recent call last) /home/sjo/work/PY_WORK/stats/ in () > 1 xcorr,lags=ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2) ValueError: too many values to unpack import matplotlib.pyplot as plt import numpy as np x,y = np.random.randn(2,100) fig = plt.figure() ax1 = fig.add_subplot(211) ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2) ax1.grid(True) ax1.axhline(0, color='black', lw=2) ax2 = fig.add_subplot(212, sharex=ax1) ax2.acorr(x, usevlines=True, normed=True, maxlags=50, lw=2) ax2.grid(True) ax2.axhline(0, color='black', lw=2) plt.show() From: Paul Hobson To: Sudheer Joseph Cc: "matplotlib-users@lists.sourceforge.net" Sent: Thursday, 7 February 2013 10:31 PM Subject: Re: [Matplotlib-users] cross correlation On Thu, Feb 7, 2013 at 3:24 AM, Sudheer Joseph wrote: Dear Users, > I am relatively new to Matplotlib. I wanted to find cross >correlation between 2 time series for my research and was looking at options >available with python and found >http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xcorr . However I >wanted to save the results in a netcdf file for further use. ie the >correlation, lags and significance if possible. Is there a way to get the corr >and lags from the axis.xcorr ?? any help in this matter will be greatly >appreciated. >Sudheer Sudheer, A call to axes.xcorr returns the lags, correlation (from np.correlate) and the line artists on the figure. In IPython, doing "plt.xcorr??" should provide sufficient information. It's a pretty simple method. -paul-- Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users