我一直在寻找一种方法,可以在创建绘图后选择绘图上可见的系列。
我需要这个,因为我经常有很多系列的情节。它们太多了,无法同时绘制,我需要快速交互式地选择哪些系列是可见的。理想情况下,将有一个窗口,其中包含绘图和复选框中的系列列表,其中选中复选框的系列可见。
有谁知道这是否已经在某处实施?如果没有,那么有人可以指导我如何自己做吗?
谢谢!
奥马尔
我一直在寻找一种方法,可以在创建绘图后选择绘图上可见的系列。
我需要这个,因为我经常有很多系列的情节。它们太多了,无法同时绘制,我需要快速交互式地选择哪些系列是可见的。理想情况下,将有一个窗口,其中包含绘图和复选框中的系列列表,其中选中复选框的系列可见。
有谁知道这是否已经在某处实施?如果没有,那么有人可以指导我如何自己做吗?
谢谢!
奥马尔
这完全取决于您愿意付出多少努力以及确切的要求是什么,但您可以打赌它已经在某个地方实施了:-)
如果主要目的是不使图像混乱,则使用内置功能可能就足够了;您可以在 matplotlib 示例库中找到相关代码:
如果你真的想要一个 UI,那么你可以通过限制绘图/数据的数量来保护性能,你通常会使用一个 GUI 工具箱,比如 GTK、QT 或 WX。在此处查找一些文章和示例代码:
如果您有几个或更少的图,带有复选框的列表会很好,但对于更多的图,弹出菜单可能会更好。不过,我不确定 matplotlib 是否可以实现这些。
我曾经实现这一点的方法是使用滑块从列表中选择绘图 - 基本上您使用滑块来设置应显示的系列的索引。每个数据集有几百个系列,所以这是快速浏览它们的好方法。
我的设置代码大致是这样的:
fig = pyplot.figure()
slax = self.fig.add_axes((0.1,0.05,0.35,0.05))
sl = matplotlib.widgets.Slider(slax, "Trace #", 0, len(plotlist), valinit=0.0)
def update_trace():
ax.clear()
tracenum = int(np.floor(sl.val))
ax.plot(plotlist[tracenum])
fig.canvas.draw()
sl.on_changed(update_trace)
ax = self.fig.add_axes((0.6, 0.2, 0.35, 0.7))
fig.add_subplot(axes=self.traceax)
update_trace()
这是一个例子:
现在 plot.ly 已经开源了他们的库,它是 python 中交互式绘图的一个非常好的选择。参见例如:https ://plot.ly/python/legend/#legend-names 。您可以单击图例迹线并选择/取消选择迹线。
如果您想嵌入 Ipython/Jupyter Notebook,这也很简单:https ://plot.ly/ipython-notebooks/gallery/