使用Chaco中的VPlotContainers绘制多个时间序列。限制您可以使用的VPlotContainer对象的数量

时间:2014-04-07 15:47:56

标签: enthought traitsui chaco

我希望在同一个图中绘制存储在NumPy数组中的多个时间序列数据,但每个时间序列偏移,因此它有效地拥有它自己的Y轴。我认为最好的方法可能是将每个系列放在一个单独的VPlotContainer中,但是当我调用configure_traits()调用时,我只是得到一个空白窗口。问题是我有太多时间序列供机器处理吗?

class EEGPlot(HasTraits):
    plot = Instance(VPlotContainer)

    traits_view = View(
    Item('plot',editor=ComponentEditor(), show_label=False),
    width=1024, height=768, resizable=True, title="EEG Preview")

    def __init__(self, eegObject):
        super(EEGPlot, self).__init__()

        x = xrange(eegObject.windowStart, eegObject.windowEnd)

        plotNames = {}
        allPlots = []

        for idx, column in enumerate(eegObject.data[:,:].transpose()): # only included indexes to indicate array dimensions
            y = column
            plotdata = ArrayPlotData(x=x, y=y)
            myplot = Plot(plotdata)
            myplot.plot(("x", "y"), type="line", color="blue")
            plotNames["plot{0}".format(idx)] = myplot
            allPlots.append(plotNames["plot{0}".format(idx)])

        container = VPlotContainer(*allPlots)
        container.spacing = 0

        self.plot = container

所以我的EEGObject是一个包含2维的NumPy数组。大约1500(排)到65(col)。我想知道我是否得到了空白屏幕,因为我做错了或者我只是给它太多容器?

1 个答案:

答案 0 :(得分:0)

答案似乎是我使用了错误的工具来尝试实现我所需要的。 VPlotContainers用于在主显示容器内分离不同的图(甚至可能来自不同的数据源)。

当我将测试数组输入到原始问题中只有5列的代码中时,每个列都在一个单独的容器中绘制,但是当我将列增加到6以上时,UI窗口将显示为空白。

所以我猜答案是肯定的,你可以使用的VPlotContainers的数量似乎有限,但是我不知道这个限制是绝对的还是专用于主UI窗口的空间所限制的或者是什么。

无论哪种方式,使用VPlotContainers都不是显示多个时间序列数据的合适技术。如果您希望分隔行,或者OverlayPlotContainer,则正确的对象将是MultiLinePlot。

http://docs.enthought.com/chaco/user_manual/plot_types.html#multi-line-plot

我在使用MultiLinePlot时也遇到了问题,但是已经将这个问题移到了一个单独的线程中:

Chaco MultiLinePlot - unable to get simple plot to display, wondering if package broken?