我有几组(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的输出如下所示:
答案 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')
答案 1 :(得分:6)
Chaco和Matplotlib并没有真正试图解决相同类型的问题。 Matplotlib更适合在脚本中创建快速绘图,并且非常易于使用。 Chaco是一个允许的绘图框架:
然而,利用该框架需要更多代码,而在Chaco中构建绘图的推荐方法是使用其面向对象的语法。最简单但最现实的查科情节就像this。它需要ArrayPlotData
来保存数据,而Plot对象需要创建绘图区域并使用不同的方式来渲染数据。
您想拥有多个线图而不是一个。您只需在__init__
方法中添加for循环,即可在ArrayPlotData
内添加每个相关的numpy数组,并为每对数组调用plot
方法Plot
object(但只需要1个Plot对象)。完成了类似的事情a little further down in the page。