【问题标题】:How to plot multiple (x,y) series on the same axes with Chaco?如何使用 Chaco 在同一轴上绘制多个 (x,y) 系列?
【发布时间】:2013-04-19 21:56:12
【问题描述】:

我有几组 (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 的输出如下所示:

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

【问题讨论】:

    标签: enthought chaco


    【解决方案1】:

    上面基于 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')
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      祝你好运,

      【讨论】:

      • 感谢乔纳森的帮助。我将我的问题浓缩得如此之多,可能不清楚该代码是否确实是使用 enaml 和 Traits 的绘图应用程序的一部分。我意识到我的错误(使用容器)并发布了我自己的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多