2013-04-25 90 views
3

我有幾組(x,y)數據,我想將它們繪製爲同一圖上的線圖。我在matplotlib這樣做沒有問題,但我無法得到與Chaco相同的結果。代碼和輸出如下所示。如何在Chaco的同一軸上繪製多個(x,y)系列?

我基於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更適合在腳本中創建快速繪圖,並且非常易於使用。查科是一個繪圖架構,允許:

  • 對於更大的數據集更加順暢處理
  • 一個框架,一個更強有力的架構,可以很容易地圍繞打造情節GUI(性狀)
  • 創建自定義的交互式工具

然而,利用該框架需要更多的代碼,而建議在Chaco中構建圖的方式是使用其面向對象的語法。最簡單但是現實的Chaco情節就像this。它需要一個ArrayPlotData來保存數據和一個Plot對象來創建一個繪圖區域,並持有不同的方式來呈現該數據。

你想有許多線圖而不是一個。可以簡單的方法__init__內添加一個for循環每個相關numpy的陣列添加ArrayPlotData內部以及對於每一對陣列,來調用Plot對象的plot方法(但僅需要1劇情對象)。類似的事情完成a little further down in the page

祝你好運,

+0

感謝您的幫助喬納森。我凝聚我的問題那麼多,它可能是不明確的代碼確實是用enaml和性狀的繪圖應用程序的一部分。我意識到我的錯誤(使用容器)併發布了我自己的解決方案。 – JefferyRPrice 2013-04-26 11:13:32

相關問題