[SciPy-user] Getting coordinates of a level (contour) curve
John Hunter
jdh2358@gmail....
Tue Aug 12 10:08:02 CDT 2008
On Tue, Aug 12, 2008 at 9:36 AM, Rob Clewley <rob.clewley@gmail.com> wrote:
>> Yes, you are right. But what if I have a mixture of gaussians, or any
>> other 2D probability density function?
>
> Indeed. Isn't the question about how to extract the data points for
> the curve from the 'contour' object in matplotlib, in the general
> case? Unfortunately I don't have the answer to that, but maybe
> introspection of the object would lead to an answer. From the API doc
> I see a mysterious attribute called 'level'.
The mpl contour function returns a matplotlib.contour.ContourSet
instance which has an attribute "level" array of levels that the
contours are drawn on
In [57]: CS = plt.contour(X, Y, Z)
In [58]: CS.levels
Out[58]: array([-1. , -0.5, 0. , 0.5, 1. , 1.5])
It also has an equal length list of line collections
(matplotlib.collections.LineCollection) which you can use to extract
the x, y vertices of the contour lines at a given level. For a single
level, the line collection may contain one or more independent lines
in the collections. Here is some example code to get you started:
In [59]: level0 = CS.levels[0]
In [60]: print level0
-1.0
In [61]: c0 = CS.collections[0]
In [62]: paths = c0.get_paths()
In [63]: len(paths)
Out[63]: 1
In [64]: path0 = paths[0]
In [65]: xy = path0.vertices
In [66]: xy.shape
Out[66]: (237, 2)
In [67]: xy[:10,]
Out[67]:
array([[-0.15 , -0.95150169],
[-0.15877627, -0.95 ],
[-0.175 , -0.94720234],
[-0.2 , -0.94221229],
[-0.225 , -0.93652781],
[-0.25 , -0.93013814],
[-0.26810676, -0.925 ],
[-0.275 , -0.9230207 ],
[-0.3 , -0.91514134],
[-0.325 , -0.90651218]])
In [68]:
More information about the SciPy-user
mailing list