Skip to content

Interactive plots in IPython notebooks #50

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
cwrowley opened this issue Mar 20, 2015 · 6 comments
Open

Interactive plots in IPython notebooks #50

cwrowley opened this issue Mar 20, 2015 · 6 comments

Comments

@cwrowley
Copy link
Contributor

I find IPython notebooks a great way to work interactively, and it would be nice if inline plots could be interactive (e.g., letting you zoom, or having tool tips show more information). With matplotlib, though, inline plots are just images, so they cannot be interactive.

There's a new plotting library called Bokeh, an open-source project led by Continuum Analytics (the wonderful folks that make Anaconda), that looks really nice for making interactive plots like this. I'd like to try making an alternate backend one could specify with, say, control.set_backend("bokeh") that would make commands like bode() and nyquist() generate plots using Bokeh. The default could still be matplotlib, of course.

Any thoughts or suggestions for other libraries that might be useful for making interactive plots?

@cwrowley cwrowley self-assigned this Mar 20, 2015
@slivingston
Copy link
Member

Outside of IPython notebooks, you can zoom-in, pan, etc. in Matplotlib plots. I just shared a link via issue #49 to matplotlib.backend_bases.MouseEvent for responding to clicks on points in these plots.

Perhaps there can be two major interactive use-cases: with and without IPython. The former case could be treated with Bokeh, and the latter case with Matplotlib and various GUI hooks that we create.

@blinkminster
Copy link

Clancy,

I use the following code in my ipython notebooks and it makes the plots
interactive (zooming, panning work; this is in the standard Anaconda
distribution on OSX 10.10):

import matplotlib as mlt
mlt.use('nbagg') # makes plots interactive for zooming.

I haven't tested it with python-control yet but I don't see why there would
be a problem.

  • Sawyer

Sawyer B. Fuller, Ph.D.
Harvard School of Engineering and Applied Science
Wyss Institute for Biologically Inspired Engineering
http://people.seas.harvard.edu/~minster/

On Fri, Mar 20, 2015 at 1:55 PM, Clancy Rowley notifications@github.com
wrote:

I find IPython notebooks a great way to work interactively, and it would
be nice if inline plots could be interactive (e.g., letting you zoom, or
having tool tips show more information). With matplotlib, though, inline
plots are just images, so they cannot be interactive.

There's a new plotting library called Bokeh http://bokeh.pydata.org, an
open-source project led by Continuum Analytics (the wonderful folks that
make Anaconda http://continuum.io/downloads), that looks really nice
for making interactive plots like this. I'd like to try making an alternate
backend one could specify with, say, control.set_backend("bokeh") that
would make commands like bode() and nyquist() generate plots using Bokeh.
The default could still be matplotlib, of course.

Any thoughts or suggestions for other libraries that might be useful for
making interactive plots?

Reply to this email directly or view it on GitHub
#50.

@cwrowley
Copy link
Contributor Author

@blinkminster, that is pretty slick! I never new about nbagg. (Incidentally, this also apparently works with the IPython magic %matplotlib nbagg.) I still might give the Bokeh library a try, but this is great to know about.

@marthoch marthoch mentioned this issue Aug 18, 2015
@ilayn
Copy link

ilayn commented Jan 2, 2017

I am also wondering about this issue for my library and I have been also trying to find a good basis for this issue. So far I've been experimenting with Bokeh. Things are still wonky as an experiment but I just wanted to also get your opinion about the following prototype

http://nbviewer.jupyter.org/gist/ilayn/f8cf8b0a68c6839dbcc346884511e2ed

There are some issues of course since I'm still learning JS magic but I guess it might serve as a basis. Though I don't follow the same structure as python-control the data will come from somewhere anyway for frequency responses. Hence, from the point on where one has the complex number array this can be used independently. Maybe python-control devs can use this and put more momentum to this kind of development?

@cwrowley cwrowley removed their assignment Jan 1, 2018
@murrayrm
Copy link
Member

See PR #204 and #209 for some initial implementations of this type of functionality.

@lucasbellinaso
Copy link

lucasbellinaso commented Jan 13, 2021

Hello,
I teach control systems. I recently created an interactive interface with Bokeh for using in Google Colab similar to Sisotool (Matlab): https://github.com/lucasbellinaso/PythonSisoDesignApp
Still needs improvement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants