gpt4 book ai didi

python - 在 Chaco 中动态创建地 block

转载 作者:太空狗 更新时间:2023-10-29 17:08:02 24 4
gpt4 key购买 nike

Python 的 Chaco 绘图工具包包括展示如何动态更新现有绘图的示例。但是,我的应用程序要求我根据数据动态创建和销毁绘图。我刚开始使用 Chaco 和 Traits 进行编程,所以一个简单的示例来说明如何执行此操作将非常有帮助。

最佳答案

这有点晚了,但这里有一个创建和销毁 Chaco 图的示例。主要界面是PlotSelector,它定义了一些假数据和单选按钮以在两种不同的绘图样式(线图和条形图)之间切换。

此示例使用 Traits 事件来指示何时关闭绘图,然后使用 PlotController 处理该信号。可能有更好的关闭窗口的方法,但我找不到。

编辑:为较新版本的 Traits、Chaco 和 Enable(ETS 4 而不是 3)更新了导入。

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()

请注意,主界面 (PlotSelector) 调用 configure_traits(启动应用程序),而使用 edit_traits 查看绘图(从内部调用应用)。另请注意,此示例从 PlotController 调用 edit_traits,而不是从模型调用它。您可以改为将 View 从 PlotController 移动到 BasicPlot 并将该 View 的处理程序方法设置为 PlotController

最后,如果您不需要完全销毁绘图窗口,那么您可能需要查看 Plot 对象的 delplot 方法,它会销毁 *< em>sub*plot(这里是线图或条形图)。

希望对您有所帮助。

关于python - 在 Chaco 中动态创建地 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401748/

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