gpt4 book ai didi

enthought - 更新 Chaco HPlotContainer 组件的数据

转载 作者:行者123 更新时间:2023-12-03 08:03:17 25 4
gpt4 key购买 nike

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

AttributeError: 'LinePlot' 对象没有属性 'data'

显然我在这里做的事情不对。

最佳答案

您正在操作的 LinePlot 对象实际上是 Chaco 所说的“渲染器”,并且无法访问数据。要动态更新绘图,您需要调用 ArrayPlotData 对象的 set_data 方法。您可以在 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 对象进行任何操作。

我得到如下所示的输出:

enter image description here

关于enthought - 更新 Chaco HPlotContainer 组件的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com