0

我希望绘制存储在一个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 是一个二维的 NumPy 数组。大约 1500(行)乘 65(列)。我想知道我是否因为做错了什么而得到了空白屏幕,或者我只是给了它太多容器?

4

1 回答 1

0

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

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

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

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

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

我在使用 MultiLinePlot 时也遇到问题,但已将此问题移至此处的单独线程:

Chaco MultiLinePlot - 无法显示简单的绘图,想知道包装是否损坏?

于 2014-04-09T14:44:07.633 回答