From: Chris <bi...@Fu...> - 2004-11-16 16:08:20
|
I tried with what you suggested to make an Arrow class. To begin with, I only put an Line2D instance. I searched for table stuff in axes.py, matlab.py to make the arrow importable from matplotlib.matlab. Then I also try a very very simple demo and I expect to see a simple line. However, I can not see it. Could someone tell me what is the problem. Here is my very very rudimental codes. ----------------------------------------------------------------- arrow.py from artist import Artist from lines import Line2D from patches import RegularPolygon class Arrow(Artist): """ An arrow with an triangular head . """ def __init__(self, xdata=None, ydata=None, *args, **kwargs): Artist.__init__(self) print xdata, ydata self._stem = Line2D(xdata, ydata, *args, **kwargs) def draw(self, renderer): self._stem.draw(renderer) ------------------------------------------------------------ in file axes.py in function cla add: self.arrows = [] --------------------------- def add_arrow(self, a): 'Add an arrow instance to the list of axes arrows' self._set_artist_props(a) self.arrows.append(a) def arrow(self, x, y, *args, **kwargs): a = Arrow(x,y, *args, **kwargs) self.add_arrow(a) return a ------------------------------------------------------------- in file matlab.py add two tring for importing arrow ------------------------------------------------------------- arrow_demo.py from matplotlib.matlab import * x = [0,1] y = [0,1] arrow(x,y, color='b',linestyle='-') show() ------------------------------------------------------------- Best regards, Chris John Hunter wrote: > I recommend creating an arrow class, derived from matplotlib.artist.Artist, that > contains a matplotlib.lines.Line2D for the arrow stem and a > matplotlib.patches.RegularPolygon with numVertices=3 for the arrow > head. You can control the rotation of the arrowhead with the > orientation argument. > > Once you have this class so defined, you can add it instances of it to > the axes with ax.add_artist(arrow). > > I'll be happy to help out with a prototype if you have trouble. Take > a look at matplotlib.table.Cell, which John Gill wrote to support > tables. You can use this as a simple model for how to write new > artists (things that draw into a figure) composed of other artists. > > It would be nice to have a fancy arrow class, that supported text > labeling, at the base, along the stem and at the arrowhead. You could > also consider a more sophisticated polygon other than a triangle for > the arrowhead. > > Finally, if you needed to draw *a lot of arrows*, order of a thousand > or more (eg for direction fields), a > matplotlib.collections.PolygonCollection would be the way to go for > efficiency. > > JDH > > > ------------------------------------------------------- > This SF.Net email is sponsored by: > Sybase ASE Linux Express Edition - download now for FREE > LinuxWorld Reader's Choice Award Winner for best database on Linux. > http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click |