2013-04-25 86 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

相关问题