I have problem with interactive feature of Matplotlib. I ran the following program and received a freezing empty graph window.
import matplotlib.pyplot as plt import numpy as np plt.ion() x = np.arange(0, 4*np.pi, 0.1) y = [np.sin(i) for i in x] plt.plot(x, y, 'g-', linewidth=1.5, markersize=4) plt.show()
If I removed 'plt.ion()' statement, then it worked just fine. I use IDLE and the Matplotlib version 1.2.x package is installed in Python 3.2.2.
I expect it to be interactive, but instead I got an unfriendly non-interactive window. Can someone shed some light of what I am missing? Thank you in advance.
ion() in Python. Matplotlib is an amazing visualization library in Python for 2D plots of arrays. Matplotlib is a multi-platform data visualization library built on NumPy arrays and designed to work with the broader SciPy stack.
The interactivity is not only limited to 2D plots but can also be observed in 3D plots. The code has been taken from matplotlib's official documentation.
Matplotlib can be used in an interactive or non-interactive modes. In the interactive mode, the graph display gets updated after each statement. In the non-interactive mode, the graph does not get displayed until explicitly asked to do so.
I bumped into this link found here, which answers my problem.
It seems that after turning on interactive mode through plt.ion()
, pyplot needs to be paused temporarily for it to update/redraw itself through plt.pause(0.0001)
. Here is what I did and it works!
>>> import matplotlib.pyplot as plt >>> import numpy as np >>> plt.ion() >>> x = np.arange(0, 4*np.pi, 0.1) >>> y = [np.sin(i) for i in x] >>> plt.plot(x, y, 'g-', linewidth=1.5, markersize=4) >>> plt.pause(0.0001) >>> plt.plot(x, [i**2 for i in y], 'g-', linewidth=1.5, markersize=4) >>> plt.pause(0.0001) >>> plt.plot(x, [i**2*i+0.25 for i in y], 'r-', linewidth=1.5, markersize=4) >>> plt.pause(0.0001)
If you tried that in your IDLE console, notice that up to this point everything got displayed except that the graph window freezes and cannot exit. To unfreeze it type the following last statement
>>> plt.show(block=True)
Now the window can be closed.
I am having the exact same problem. In ipython there is the magic %matplotlib
, which solved the problem for me. At least now I can type plt.figure()
(assuming that import matplotlib.pyplot as plt
has been called) and get a fully interactive responsive figure.
However, I would still be interested to know what this magic imports exactly to be able to understand the problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With