From: John H. <jdh...@ac...> - 2005-02-11 21:36:38
|
>>>>> "Ted" == Ted Drain <ted...@jp...> writes: Ted> For example, if I have a data set that looks like this: Ted> [155,2] [165,4] [175,6] [-175,8] [-165,10] [-155,12] Ted> I really need this data to be drawn as two separate lines: Ted> [155,2] [165,4] [175,6] [180,7] Ted> and [-180,7] [-175,8] [-165,10] [-155,12] Ted> Ideally these two segments should be treated as a single line Ted> wherever applicable (legend, style, etc). Got it -- what comes immediately to mind is for you to create a new class derived from Line2D, that contains your 2...N lines as private attrs, defines __getattr__ to return the attr of line[0], and calls the Line2D parent setattr on each of your contained line instances. You can then add this line to the Axes with add_line. You would have to be a little clever with the get_xdata and get_ydata attrs, which are used for autoscaling. If this looks like a good way to go, I can help you with it if you want - it could be tricky to get just right. The other possibility would be to setup an observer pattern on the line0 properties, such that any changes would be fired off to the observers. This is an area where it would be nice to have enthought traits built-in, since all trains support observers. As you may have noticed on the dev list, this is an area of active discussion. Ted> I'd probably label this as a "mostly acceptable work-around" Ted> since it requires generating two data arrays. In my case, Ted> the data is expensive to compute so we'd probably have to Ted> generate a second array by selectively copying points from Ted> the first array which is kind of annoying. I was hoping for Ted> a keyword that said how often to generate the markers for an Ted> existing line (with the default as one of course). Probably Ted> not a huge deal though. If this becomes a performance problem for you, another idea would be to use a marker mask. Eg add an additional property to the line class which are the indices at which to write markers. Currently the line class is hairy in CVS, mainly because it is supporting the old and newstyle backend drawing interfaces. The newstyle interface has only two renderer methods that it calls (draw_lines and draw_markers). It would be fairly easy to subclass Line2D to support a marker mask, possibly passing it on as a kwarg to the renderer.draw_markers method. One could do it in Numeric a the python level; if you are looking for optimal performance, it would be barely more than a no-op at the backend level. JDH |