Re: [Matplotlib-users] Problem with PatchCollection and FancyArrowPatch?

2013-01-31 Thread Jae-Joon Lee
FancyArrowPatch behaves quite differently from normal patches.
Most importantly, the path must be reevaluated during the drawing time, so
a normal PatchCollection, which evaluate the paths during the instance
creation, won't work. i.e., you need a new Collection class.

Below is a very incomplete implementation of FancyArrowPatchCollection,
just for a demonstration purpose. And I recommend you to open a wishlist
ticket at the issue tracker (https://github.com/matplotlib/matplotlib/issues
).

Regards,

-JJ


class FancyArrowPatchCollection(PatchCollection):
def set_paths(self, patches):
self._patches = patches

def get_paths(self):
paths = []
for p in self._patches:
p.set_transform(self.get_transform())
_path, fillable = p.get_path_in_displaycoord()
paths.extend(_path)
return paths

def _prepare_points(self):
import matplotlib.transforms as mtransforms
transform, transOffset, offsets, paths =
PatchCollection._prepare_points(self)
return mtransforms.IdentityTransform(), transOffset, offsets, paths




On Thu, Jan 31, 2013 at 6:33 AM, Skipper Seabold jsseab...@gmail.comwrote:

 Hi,

 Trying to figure out why these two do not create the same plot. Bug or
 user error?

 import matplotlib.pyplot as plt
 from matplotlib.patches import FancyArrowPatch
 from matplotlib.collections import PatchCollection

 def correct_patch(pos):
 fig, ax = plt.subplots()
 for src, dst in pos:
 arrow = FancyArrowPatch(posA=src, posB=dst,
 color='k', arrowstyle='-|',
 mutation_scale=30, connectionstyle=arc3)
 ax.add_patch(arrow)
 return fig

 def patch_collection_problem(pos):
 fig, ax = plt.subplots()
 pos = [[(.5, .5), (.25, .25)],
[(.1, .5), (.2, .75)]]
 arrows = []
 for src, dst in pos:
 arrows.append(FancyArrowPatch(posA=src, posB=dst,
 color='k', arrowstyle='-|',
 mutation_scale=30, connectionstyle=arc3))
 collection = PatchCollection(arrows, match_original=True)

 ax.add_collection(collection, autolim=False)
 return fig

 pos = [[(.5, .5), (.25, .25)],
   [(.1, .5), (.2, .75)]]

 correct_patch(pos)
 patch_collection_problem(pos)


 --
 Everyone hates slow websites. So do we.
 Make your web apps faster with AppDynamics
 Download AppDynamics Lite for free today:
 http://p.sf.net/sfu/appdyn_d2d_jan
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users


--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] Problem with PatchCollection and FancyArrowPatch?

2013-01-30 Thread Skipper Seabold
Hi,

Trying to figure out why these two do not create the same plot. Bug or user
error?

import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch
from matplotlib.collections import PatchCollection

def correct_patch(pos):
fig, ax = plt.subplots()
for src, dst in pos:
arrow = FancyArrowPatch(posA=src, posB=dst,
color='k', arrowstyle='-|',
mutation_scale=30, connectionstyle=arc3)
ax.add_patch(arrow)
return fig

def patch_collection_problem(pos):
fig, ax = plt.subplots()
pos = [[(.5, .5), (.25, .25)],
   [(.1, .5), (.2, .75)]]
arrows = []
for src, dst in pos:
arrows.append(FancyArrowPatch(posA=src, posB=dst,
color='k', arrowstyle='-|',
mutation_scale=30, connectionstyle=arc3))
collection = PatchCollection(arrows, match_original=True)

ax.add_collection(collection, autolim=False)
return fig

pos = [[(.5, .5), (.25, .25)],
  [(.1, .5), (.2, .75)]]

correct_patch(pos)
patch_collection_problem(pos)
--
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users