您操縱的LinePlot
對象實際上是Chaco所稱的「渲染器」,並且無法訪問數據。要動態更新圖,您需要調用ArrayPlotData
對象上的set_data
方法。您可以訪問Plot
對象上的對象,但在您的情況下,最好直接保留對象的引用。如果您想更新LinePlot
對象,請參考它。這個例子顯示了標準的方式做那種事有TraitsUI和查科:
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
對象上的任何操作。
我得到的輸出將是這樣的:
好,'Plot'類有一個'data'屬性,當你證明自己,但'LinePlot'似乎沒有。我使用了'LinePlot',因爲我發現修改其外觀設置比如軸定位等更容易。 – MindV0rtex
感謝您的澄清。我更新了代碼和解釋。 –