4

我有几组 (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-图

我的基于 chaco 的输出如下所示:

查科图

4

2 回答 2

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')

新查科图

于 2013-04-26T11:17:46.310 回答
6

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

  • 更强大的架构,可以更顺畅地处理更大的数据集
  • 一个框架,可以轻松围绕情节构建 GUI(特征)
  • 在绘图上创建自定义交互工具

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

您希望有许多线图,而不仅仅是一个。您可以简单地在方法中添加一个 for 循环,以在每对__init__数组中添加每个相关的 numpy 数组ArrayPlotData,以调用对象的plot方法Plot(但只需要 1 个 Plot 对象)。类似的事情在页面的下方做了一点

祝你好运,

于 2013-04-26T04:27:08.183 回答