如何用Chaco在同一轴上绘制多个(x,y)系列?

时间:2013-04-25 20:43:21

标签: enthought chaco

我有几组(x,y)数据,我想在同一图上绘制为线图。 matplotlib这样做没有问题,但我无法使用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()

我的基于Chaco的代码如下所示:

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

2 个答案:

答案 0 :(得分:8)

我上面基于Chaco的代码的问题是我使用的是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

答案 1 :(得分:6)

Chaco和Matplotlib并没有真正试图解决相同类型的问题。 Matplotlib更适合在脚本中创建快速绘图,并且非常易于使用。 Chaco是一个允许的绘图框架:

  • 更强大的架构,可以更顺畅地处理更大的数据集
  • 一个框架,可以很容易地围绕绘图(Traits)构建GUI
  • 在图表上创建自定义交互式工具

然而,利用该框架需要更多代码,而在Chaco中构建绘图的推荐方法是使用其面向对象的语法。最简单但最现实的查科情节就像this。它需要ArrayPlotData来保存数据,而Plot对象需要创建绘图区域并使用不同的方式来渲染数据。

您想拥有多个线图而不是一个。您只需在__init__方法中添加for循环,即可在ArrayPlotData内添加每个相关的numpy数组,并为每对数组调用plot方法Plot object(但只需要1个Plot对象)。完成了类似的事情a little further down in the page

祝你好运,