Построение нескольких временных рядов с использованием VPlotContainers в Chaco. Ограничьте количество объектов VPlotContainer, которые вы можете использовать
Я хочу построить несколько временных рядов данных, хранящихся в 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(столб). Мне интересно, получаю ли я пустой экран, потому что я делаю что-то не так, или я просто выдаю слишком много контейнеров?
1 ответ
Кажется, ответ таков: я использовал неправильные инструменты, чтобы попытаться достичь того, что мне было нужно. VPlotContainers предназначены для отделения отдельных графиков (скорее всего, даже от разных источников данных) внутри основного контейнера отображения.
Когда я вставил тестовый массив в код исходного вопроса, в котором было только 5 столбцов, то каждый столбец отображался в отдельном контейнере, но когда я увеличил столбцы до значения выше 6, окно пользовательского интерфейса выглядело пустым.
Поэтому я предполагаю, что ответ таков: да, может показаться, что существует ограничение на количество VPlotContainers, которые вы можете использовать, но я не знаю, является ли этот предел абсолютным или ограниченным пространством, выделенным для основного окна пользовательского интерфейса, или как.
В любом случае использование VPlotContainers не является подходящим методом для отображения данных нескольких временных рядов. Правильный объект будет MultiLinePlot, если вы хотите, чтобы линии были разделены, или OverlayPlotContainer.
http://docs.enthought.com/chaco/user_manual/plot_types.html
У меня также возникают проблемы с использованием MultiLinePlot, но я перенес этот вопрос в отдельную ветку здесь:
Chaco MultiLinePlot - невозможно отобразить простой график, интересно, не сломан ли пакет?