2013-04-25 2 views
3

У меня есть несколько наборов (x, y) данных, которые я хотел бы построить в виде графиков на той же фигуре. У меня нет проблем с matplotlib делать это, но я не могу получить те же результаты с Chaco. Код и вывод показаны ниже.Как построить несколько (x, y) рядов по тем же осям с Chaco?

Мой Matplotlib основе код выглядит следующим образом:

for track in tracks: 
    xw = np.array(track['xw']) 
    yw = np.array(track['yw']) 
    plt.plot(xw, yw, 'b-') 
    if not plt.gca().yaxis_inverted(): 
     plt.gca().invert_yaxis() 

Мой Чако на основе код выглядит следующим образом:

for track in tracks: 
    x = np.array(track['xw']) 
    y = np.array(track['yw']) 
    plot = create_line_plot((x,y), color='blue', width=1.0) 
    plot.origin = 'top left' 
    container.add(plot) 
    if track == tracks[0]: 
     add_default_grids(plot) 
     add_default_axes(plot) 

Мой Matplotlib на основе вывода выглядит следующим образом:

matplotlib-figure

Мой выход на основе chaco выглядит следующим образом:

Chaco figure

ответ

7

Проблема с моим Чако на основе кода выше, что я был с помощью OverlayPlotContainer (container). Из-за этого каждый график (от create_line_plot) тянулся с собственными осями, а не каждый график, нарисованный на том же множестве осей. Следующие работы:

pd = ArrayPlotData() 
    plot = Plot(pd) 
    for ii, track in enumerate(tracks): 
     x = np.array(track['xw']) 
     y = np.array(track['yw']) 
     x_key = 'x'+str(ii) 
     y_key = 'y'+str(ii) 
     pd.set_data(x_key, x) 
     pd.set_data(y_key, y) 
     plot.plot((x_key, y_key), color='blue', origin='top left') 

New Chaco figure

6

Чако и Matplotlib не действительно пытается решить одни и те же типы проблем. Matplotlib лучше подходит для создания быстрого сюжета в сценарии и очень проста в использовании. Чако является основой зарисовки, что позволяет:

  • сильнее архитектура для работы с большими наборами данных более гладко
  • основы, которая позволяет легко создать графический интерфейс вокруг участка (черты характера)
  • создания пользовательского интерактивные инструменты на верхних участках

Использование этого фреймворка требует большего количества кода, а предлагаемый способ создания участков в Chaco - использовать его объектно-ориентированный синтаксис. Самый простой, но реалистичный сюжет Чако - это что-то вроде this. Для хранения данных и объекта Plot требуется создать ArrayPlotData, чтобы создать область построения и провести различные способы визуализации этих данных.

Вы хотите иметь много строк, а не только один. Вы можете просто добавить цикл for внутри метода __init__, чтобы добавить каждый соответствующий массив numpy внутри ArrayPlotData и для каждой пары массивов, чтобы вызвать метод plot объекта Plot (но нужен только 1 объект Plot). Что-то подобное сделано a little further down in the page.

Успехов,

+0

спасибо за помощь Джонатана. Я сконцентрировал свой вопрос так, что, вероятно, не было ясно, что код действительно является частью приложения для построения графиков, которое использует enaml и Traits. Я осознал свою ошибку (используя контейнер) и разместил собственное решение. – JefferyRPrice

 Смежные вопросы

  • Нет связанных вопросов^_^