首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新Chaco HPlotContainer组件的数据

更新Chaco HPlotContainer组件的数据
EN

Stack Overflow用户
提问于 2015-11-24 23:55:10
回答 1查看 75关注 0票数 3

我有一个默认有2个空LinePlots的HPlotContainer,它是使用create_line_plot()工厂函数创建的。然后,我执行一些计算,并希望更新绘图。如何访问LinePlot的ArrayPlotData?我尝试过像container.components[0].data这样的东西,我得到了一个

AttributeError:“”LinePlot“”对象没有属性“”data“”

显然,我在这里做的不是正确的事情。

EN

回答 1

Stack Overflow用户

发布于 2015-11-25 21:01:14

您正在操作的LinePlot对象实际上就是查科所说的“渲染器”,它不能访问数据。要动态更新绘图,需要调用ArrayPlotData对象上的set_data方法。您可以在Plot对象上访问它,但在本例中,最有意义的是直接保留对ArrayPlotData对象的引用。如果您想要更新LinePlot对象,则对其进行引用。这个例子展示了使用TraitsUI和Chaco做这类事情的标准方法:

代码语言:javascript
复制
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对象执行任何操作。

我得到的输出如下所示:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33898207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档