2012-02-22 1 views
14

のプロットを作成します。しかし、私のアプリケーションでは、は、データに応じてプロットを動的に作成して破棄する必要があります。私はChacoとTraitsを使ったプログラミングには新しいので、これを行う方法を示す簡単な例が本当に役に立ちます。は動的Python用チャコプロットツールキットがどのように動的に<em>更新</em>既存のプロットを示す例が含まれてチャコ

+0

はあなたがプロットを必要とし、それを破壊する時間だときの描画フレームを削除する前に、あなたもプロットフレームを表示したくないことを意味していますか? –

+0

フレームを見るのはあまりありません。データはプロットの数を制御し、この数値は時間とともに変化する可能性があるので、あらかじめフレームを作成することはできません。どのようにこれを行うことについて行くかもしれないかについての任意の考え? – Andreas

+1

申し訳ありませんが、すぐに素敵な答えを得る時間がありません。しかし、このページのチュートリアルは本当にあなたを助けませんか? http://github.enthought.com/chaco/user_manual/tutorial.html –

答えて

7

これは少し遅れているが、ここではチャコプロットを作成し、破壊する例です。メインインターフェイスはPlotSelectorで、2つの異なるプロットスタイル(ラインとバープロット)を切り替えるための偽データとラジオボタンを定義しています。

この例では、プロットを閉じたときに知らせるために形質イベントを使用し、次いでPlotControllerでその信号を処理します。ウィンドウを閉じるより良い方法があるかもしれませんが、見つけられませんでした。

:Traits、Chaco、Enableの新しいバージョン(3ではなくETS 4)のインポートが更新されました。

import numpy as np 

import traits.api as traits 
import traitsui.api as ui 
import chaco.api as chaco 
from enable.api import ComponentEditor 


class PlotController(ui.Controller): 
    view = ui.View(ui.Item('plot', editor=ComponentEditor(), show_label=False), 
        height=300, width=300, resizable=True) 

    def object_close_signal_changed(self, info): 
     info.ui.dispose() 


class BasicPlot(traits.HasTraits): 
    close_signal = traits.Event() 
    plot = traits.Instance(chaco.Plot) 


class LinePlot(BasicPlot): 

    def __init__(self, plotdata): 
     self.plot = chaco.Plot(plotdata) 
     self.plot.plot(('x', 'y')) 


class BarPlot(BasicPlot): 

    def __init__(self, plotdata): 
     self.plot = chaco.Plot(plotdata) 
     self.plot.candle_plot(('x', 'ymin', 'ymax')) 


available_plot_types = dict(line=LinePlot, bar=BarPlot) 

class PlotSelector(traits.HasTraits): 

    plot_type = traits.Enum(['line', 'bar']) 
    traits_view = ui.View('plot_type', style='custom') 

    def __init__(self, x, y): 
     ymin = y - 1 
     ymax = y + 1 
     self.plotdata = chaco.ArrayPlotData(x=x, y=y, ymin=ymin, ymax=ymax) 
     self.figure = None 

    def _plot_type_changed(self): 
     plot_class = available_plot_types[self.plot_type] 
     if self.figure is not None: 
      self.figure.close_signal = True 
     self.figure = plot_class(self.plotdata) 
     controller = PlotController(model=self.figure) 
     controller.edit_traits() 


N = 20 
x = np.arange(N) 
y = x + np.random.normal(size=N) 
plot_selector = PlotSelector(x, y) 
plot_selector.configure_traits() 

プロットは(アプリケーション内から呼び出さ)edit_traitsと見ながらメインインターフェース(PlotSelector)は、(アプリケーションを起動する)configure_traitsを呼び出すことに注意されたいです。また、この例ではモデルから呼び出す代わりにedit_traitsPlotControllerから呼び出しています。ビューをPlotControllerからBasicPlotに移動し、そのビューのハンドラーメソッドをPlotControllerに設定することができます。あなたは完全にプロットウィンドウを破壊する必要がない場合

最後に、あなたは(ここではラインプロットまたは棒グラフ)* サブ *プロットを破壊するPlotオブジェクトのdelplot方法を見てみたいことがあり。

私は役立つことを願っています。

関連する問題