|
From: Joe K. <jof...@gm...> - 2014-01-07 21:10:30
|
On Tue, Jan 7, 2014 at 2:29 PM, Adam Hughes <hug...@gm...> wrote: > Sorry, quick followup. I did find the gallery example to plot multiple > patches together: > > http://matplotlib.org/examples/api/patch_collection.html > > That's excellent. Now I guess my question is how best to generalize the > process of turning my objects into patches. I think I will just try to > keep the geometry (ie line --> mpatch.Line) unless anyone has any better > suggestions. > As you've already found out, it sounds like you want a PatchCollection. There is one catch, though. Your lines/curves will need to be converted to PathPatches (which is trivial), which can then have a facecolor. Because all items in a collection will have the same facecolor by default, this means that your lines will become "filled" polygons, unless you specify otherwise. Therefore, you'll need to do something like this: import matplotlib.pyplot as plt from matplotlib.path import Path import matplotlib.patches as mpatches from matplotlib.collections import PatchCollection # Just a simple line, but it could be a bezier curve, etc. line = Path([(-20, -20), (-10, 10), (20, 20)]) # We'll need to convert the line to a PathPatch, and we'll throw in a circle, too line = mpatches.PathPatch(line) circle = mpatches.Circle([0, 0]) # If we don't specify facecolor='none' for the line, it will be filled! col = PatchCollection([line, circle], facecolors=['none', 'red']) fig, ax = plt.subplots() ax.add_collection(col) ax.autoscale() plt.show() Alternatively, you can just put the lines/curves in a PathCollection and the patches/polygons/etc in a PatchCollection. Hope that helps! -Joe > > Thanks! > > > On Tue, Jan 7, 2014 at 3:08 PM, Adam Hughes <hug...@gm...>wrote: > >> Hi, >> >> I am working on a library for image analysis which stores particles as >> indexed numpy arrays and provides functionality for managing the particles >> beyond merely image masking or altering the arrays directly. I've already >> designed classes for many common shapes including Lines/Curves, >> Circles/Ellipses, Polygons, Multi-shapes (eg 4 circles with variable >> overlap). >> >> What I'd really LOVE to do would be able to generate a >> matplotlib.Collection instance from these objects as generally as possible. >> Then, I'd be able to show data as a masked image, but also get a really >> nice looking plot from the objects in their Collection representation. >> >> So my question really is in the implementation. First, is there a >> general collection object that could work with ANY shape, or am I better >> off matching my shape to that collection? For example: >> >> line --> LineCollection *vs.* line --> GeneralCollection >> circle --> CircleCollection circle ---> GeneralCollection >> >> And then, is the Collections plotting API flexible enough to mix all of >> these types together? Or would I have to settle for only being able to >> plot a collection of any 1 shape type at at time? >> >> I will delve into the API further, but ascertaining this information >> would really help me get started. >> >> Thanks >> > > > > ------------------------------------------------------------------------------ > Rapidly troubleshoot problems before they affect your business. Most IT > organizations don't have a clear picture of how application performance > affects their revenue. With AppDynamics, you get 100% visibility into your > Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics > Pro! > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > |