3

create_line_plot() ファクトリ関数を使用して作成された、デフォルトとして 2 つの空の LinePlots を持つ HPlotContainer があります。次に、いくつかの計算を実行し、プロットを更新したいと思います。LinePlot の ArrayPlotData にアクセスするにはどうすればよいですか? 私は次のようなことを試しcontainer.components[0].dataましたが、

AttributeError: 'LinePlot' オブジェクトに属性 'data' がありません

明らかに、私はここで正しいことをしていません。

4

1 に答える 1

0

操作しているLinePlotオブジェクトは、実際には Chaco が「レンダラー」と呼んでいるものであり、データにアクセスすることはできません。プロットを動的に更新するset_dataには、オブジェクトでメソッドを呼び出しArrayPlotDataます。オブジェクトでアクセスできますPlotが、あなたの場合、オブジェクトへの直接参照を保持することが最も理にかなっていArrayPlotDataます。オブジェクトを更新する場合は、LinePlotオブジェクトへの参照を作成します。この例は、TraitsUI と Chaco を使用してそのようなことを行う標準的な方法を示しています。

from chaco.api import ArrayPlotData, HPlotContainer, Plot, LinePlot
from enable.api import ComponentEditor
import numpy as np
from traits.api import Array, Event, HasTraits, Instance, Int
from traitsui.api import ButtonEditor, Item, View


class DataUpdateDemo(HasTraits):
    plots = Instance(HPlotContainer)
    plot_data = Instance(ArrayPlotData)
    line_plot_1 = Instance(LinePlot)
    line_plot_2 = Instance(LinePlot)
    x = Array
    y = Array
    go = Event
    w = Int(1)

    def _x_default(self):
        x = np.linspace(-np.pi, np.pi, 100)
        return x

    def _y_default(self):
        y = np.sin(self.w * self.x)
        return y

    def _plots_default(self):
        self.plot_data = ArrayPlotData(y=self.y, x=self.x)
        plot1 = Plot(self.plot_data)
        self.line_plot_renderer1 = plot1.plot(('x', 'y'), kind='line')[0]
        plot2 = Plot(self.plot_data)
        self.line_plot_renderer_2 = plot2.plot(('y', 'x'), kind='line')[0]
        plots = HPlotContainer(plot1, plot2)
        return plots

    def _go_fired(self):
        self.w += 1
        y = np.sin(self.w * self.x)
        self.plot_data.set_data("y", y)

    traits_view = View(
        Item('plots', editor=ComponentEditor(), show_label=False),
        Item('go', editor=ButtonEditor(label="update"), show_label=False),
    )


if __name__ == "__main__":
    dud = DataUpdateDemo()
    dud.configure_traits()

これで、オブジェクトに対して必要な操作を行うことができLinePlotます。

次のような出力が得られます。

ここに画像の説明を入力

于 2015-11-25T13:01:14.117 に答える