Sophie

Sophie

distrib > Mandriva > current > i586 > by-pkgid > ae0a4f27f26602dc31c3bf35e18b5b19 > files > 551

python-enthought-chaco-3.4.0-2mdv2010.2.i586.rpm


from numpy import linspace, sin

from enthought.chaco.api import ArrayPlotData, Plot
from enthought.chaco.tools.api import PanTool, ZoomTool
from enthought.enable.component_editor import ComponentEditor
from enthought.traits.api import Enum, HasTraits, Instance
from enthought.traits.ui.api import Item, Group, View

class PlotEditor(HasTraits):

    plot = Instance(Plot)
    plot_type = Enum("scatter", "line")
    orientation = Enum("horizontal", "vertical")
    traits_view = View(Item('orientation', label="Orientation"),
                       Item('plot', editor=ComponentEditor(), show_label=False), 
                       width=500, height=500, resizable=True)

    def __init__(self, *args, **kw):
        HasTraits.__init__(self, *args, **kw)
        # Create the data and the PlotData object
        x = linspace(-14, 14, 100)
        y = sin(x) * x**3
        plotdata = ArrayPlotData(x = x, y = y)
        # Create the scatter plot
        plot = Plot(plotdata)
        plot.plot(("x", "y"), type=self.plot_type, color="blue")
        plot.tools.append(PanTool(plot))
        plot.tools.append(ZoomTool(plot))
        self.plot = plot
    
    def _orientation_changed(self):
        if self.orientation == "vertical":
            self.plot.orientation = "v"
        else:
            self.plot.orientation = "h"
        self.plot.request_redraw()
        

#===============================================================================
# demo object that is used by the demo.py application.
#===============================================================================
class Demo(HasTraits):
    
    # Scatter plot.
    scatter_plot = Instance(PlotEditor)
    
    # Line plot.
    line_plot = Instance(PlotEditor)
    
    traits_view = View(Group(
                             Item('@scatter_plot', show_label=False),
                             label='Scatter'),
                        Group(Item('@line_plot', show_label= False ),
                              label='Line'),
                              title='Chaco Plot',
                              resizable=True)
    
    def __init__(self, *args, **kws):
        super(Demo, self). __init__(*args, **kws)
        #Hook up the ranges.
        self.scatter_plot.plot.range2d = self.line_plot.plot.range2d
        
    def _scatter_plot_default(self):
        return PlotEditor(plot_type="scatter")
    
    def _line_plot_default(self):
        return PlotEditor(plot_type="line")
    
demo = Demo()
if __name__ == "__main__":
    demo.configure_traits()