我希望在同一个图中绘制存储在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)。我想知道我是否得到了空白屏幕,因为我做错了或者我只是给它太多容器?
答案 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?