Skip to content Skip to sidebar Skip to footer

Interactive Selection Of Series In A Matplotlib Plot

I have been looking for a way to be able to select which series are visible on a plot, after a plot is created. I need this as i often have plots with many series. they are too man

Solution 1:

It all depends on how much effort you are willing to do and what the exact requirements are, but you can bet it has already been implemented somewhere :-)

If the aim is mainly to not clutter the image, it may be sufficient to use the built-in capabilities; you can find relevant code in the matplotlib examples library:

If you really want to have a UI, so you can guard the performance by limiting the amount of plots / data, you would typically use a GUI toolbox such as GTK, QT or WX. Look here for some articles and example code:


Solution 2:

A list with checkboxes will be fine if you have a few plots or less, but for more plots a popup menu would probably be better. I am not sure whether either of these is possible with matplotlib though.

The way I implemented this once was to use a slider to select the plot from a list - basically you use the slider to set the index of the series that should be shown. I had a few hundred series per dataset, so it was a good way to quickly glance through them.

My code for setting this up was roughly like this:

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

Here's an example:

Plot image


Solution 3:

Now that plot.ly has opened sourced their libraries, it is a really good choice for interactive plots in python. See for example: https://plot.ly/python/legend/#legend-names. You can click on the legend traces and select/deselect traces.

If you want to embed in an Ipython/Jupyter Notebook, that is also straightforward: https://plot.ly/ipython-notebooks/gallery/


Post a Comment for "Interactive Selection Of Series In A Matplotlib Plot"