문제

Python용 Chaco 플로팅 툴킷에는 동적으로 방법을 보여주는 예제가 포함되어 있습니다. 업데이트 기존 플롯.하지만 내 지원서에는 다음 사항이 필요합니다. 동적으로 플롯을 생성하고 파괴합니다. 데이터에 따라.저는 Chaco 및 Traits를 사용한 프로그래밍이 처음이므로 이 작업을 수행하는 방법을 보여주는 간단한 예가 정말 도움이 될 것입니다.

도움이 되었습니까?

해결책

조금 늦었지만 Chaco 플롯을 생성하고 파괴하는 예는 다음과 같습니다.주요 인터페이스는 PlotSelector, 이는 두 가지 다른 플롯 스타일(선 및 막대 플롯) 간에 전환하기 위한 일부 가짜 데이터와 라디오 버튼을 정의합니다.

이 예에서는 Traits 이벤트를 사용하여 플롯을 닫을 시기를 알리고 다음으로 해당 신호를 처리합니다. 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()

기본 인터페이스(PlotSelector) 전화 configure_traits (응용 프로그램 시작), 플롯을 보는 동안 edit_traits (응용 프로그램 내에서 호출됨)또한 이 예제에서는 다음을 호출합니다. edit_traits ~에서 PlotController 모델에서 호출하는 대신.대신 뷰를 다음에서 이동할 수 있습니다. PlotController 에게 BasicPlot 해당 뷰의 핸들러 메소드를 다음과 같이 설정합니다. PlotController.

마지막으로 플롯 창을 완전히 파괴할 필요가 없다면 다음을 살펴보는 것이 좋습니다. Plot 사물 delplot *를 파괴하는 메소드보결*플롯(여기서는 선 플롯 또는 막대 플롯).

도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top