IPython with and Without Notebook Differences - python

One of the most important improvisations of Python that are my favorites are IPython and IPython Notebook.
I was watching and repeating what's shown in this video and found some issues.
As specified in the video, I use ipython --pylab to launch IPython.
And I use ipython notebook --pylab to launch IPython Notebook.
Issues: scatter() would not work in IPython NoteBook (I get a NameError) but works fine in IPython.
Same is the case with the function rand(). I guess pylab is loaded along with matplotlib, scipy, numpy, random and other essential libraries.
Please tell me if I am wrong. By the way, both my IPython and IPython NoteBook load from my Anaconda Dist., if that means anything.
Also any resource where I can know what all is loaded when I use --pylab would help.
Thanks.

This is what the pylab flag does:
import numpy
import matplotlib
from matplotlib import pylab, mlab, pyplot
np = numpy
plt = pyplot
from IPython.core.pylabtools import figsize, getfigs
from pylab import *
from numpy import *
That said, it is recommended that you launch the notebook without the flag (just ipython notebook) and then run:
%matplotlib inline
For more details see No Pylab Thanks.
Regarding your scatter problem, you should try the following:
%matplotlib inline
import matplotlib.pyplot as plt
plt.scatter([1,2], [1,2])

Here's another example of why you shouldn't use %pylab inline:
Before %pylab inline: bool(all(i for i in range(3))) => False
After %pylab inline: bool(all(i for i in range(3))) => True
The %pylab inline statement imports numpy.all, which has a different behavior. See help(all) before and after %pylab inline to see. Also, try print(', '.join(sorted(globals().keys()))) before & after to see the vast number of things that get imported.
As mentioned by others, %matplotlib inline avoids this and the subsequent subtle / hard-to-find issues that it causes.

Related

matplotlib pyplot error in jupyter notebook

Within Jupyter notebook I can import matplotlib but not the pyplot module:
import matplotlib % works
import matplotlib.pyplot as plt % The kernel appears to have died. It will restart automatically.
An alternative test also fails:
import matplotlib
matplotlib.pyplot % AttributeError: module 'matplotlib' has no attribute 'pyplot'
However, I can import the pyplot module from the conda command prompt with no errors:
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.show()
I got the same results in both the "base" environment and a virtual environment that I created.
Does anyone know what the problem is? I've tried uninstalling and reinstalling the maplotlib package, as well as Jupyter notebook, and conda itself.
This imports matplotlib module/library and then you are trying looks for an attribute or variable defined in matplotlib library named as pyplot; which does not exist. pyplot is just an interface for you to call other relevant interactive state-based functions to plot.
import matplotlib
matplotlib.pyplot
In my opinion you should stick to naming/importing convention defined in documentations of libraries for coherent code.
import matplotlib.pyplot as plt
This is all you need.
import matplotlib.pyplot as plt % The kernel appears to have died. It will restart automatically.
This means you have to restart your juypter there will be a cmd window that you could have closed I recommend you to restart the juypter and then
import matplotlib.pyplot as plt
if it does not work
open juypter cmd from search bar and write pip install matplotlib after the task is done in jupyter cmd reopen juypter and than use
import matplotlib.pyplot as plt
Not that I understand what the problem was, but what worked for me is uninstalling matplotlib with conda, and re-installing it with pip. Oftentimes, the conda versions are not the latest, and there is probably a problem with the specific version. As of matplotlib 3.6.1 pyplot does work in jupyter (I tried with base), though reinstallation of kiwisolver might be needed as well.

How do I make matplotlib work in AWS EMR Jupyter notebook?

This is very close to this question, but I have added a few details specific to my question:
Matplotlib Plotting using AWS-EMR jupyter notebook
I would like to find a way to use matplotlib inside my Jupyter notebook. Here is the code-snippet in error, it's fairly simple:
notebook
import matplotlib
matplotlib.use("agg")
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()
I chose this snippet because this line alone fails as it tries to use TKinter (which is not installed on an AWS EMR cluster):
import matplotlib.pyplot as plt
When I run the full notebook snippet, the result is no runtime error but also nothing happens (no graph is shown.) My understanding on one way this can work is by adding either of the following snips:
pyspark magic notation
%matplotlib inline
results
unknown magic command 'matplotlib'
UnknownMagic: unknown magic command 'matplotlib'
IPython explicit magic call
from IPython import get_ipython
get_ipython().run_line_magic('matplotlib', 'inline')
results
'NoneType' object has no attribute 'run_line_magic'
Traceback (most recent call last):
AttributeError: 'NoneType' object has no attribute 'run_line_magic'
to my notebook which invokes a spark magic command which inlines matplotlib plots (at least that's my interpretation.) I have tried both of these after using a bootstrap action:
EMR bootstrap
sudo pip install matplotlib
sudo pip install ipython
Even with these added, I still get an error that there is no magic for matplotlib. So my question is definitely:
Question
How do I make matplotlib work in an AWS EMR Jupyter notebook?
(Or how do I view graphs and plot images in AWS EMR Jupyter notebook?)
The answer by #00schneider actually works.
import matplotlib.pyplot as plt
# plot data here
plt.show()
after
plt.show()
re-run the magic cell that contains the below, and you will see a plot on your AWS EMR Jupyter PySpark notebook
%matplot plt
As you mentioned, matplotlib is not installed on the EMR cluster, therefore such error will occur:
However, it is actually available in the managed Jupyter notebook instance (the docker container). Using the %%local magic will allow you to run the cell locally:
Import matplotlib as
import matplotlib.pyplot as plt
and use the magic command %matplot plt instead as shown in the tutorial here: https://aws.amazon.com/de/blogs/big-data/install-python-libraries-on-a-running-cluster-with-emr-notebooks/
The following should work:
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
Run the entire script in one cell
To plot something in AWS EMR notebooks, you simply need to use %matplot plt. You can see this documented about midway down this page from AWS.
For example, if I wanted to make a quick plot:
import matplotlib.pyplot as plt
plt.clf() #clears previous plot in EMR memory
plt.plot([1,2,3,4])
plt.show()
%matplot plt
%matplot plt
after plt.show() function works for me.
Try below code. FYI we have matplotlib 3.1.1 installed in Python3.6 on emr-5.26.0 and i used PySpark Kernel.
Make sure that "%matplotlib inline" is first line in cell
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()

Running twice the libraries to have interactive plots on jupyter

Every time I want to have an interactive plot on Jupyter, I have to run the libraries twice. The libraries are as simple as this:
import matplotlib.pyplot as plt
%matplotlib notebook
The first time I make a plot I have a static image (like shown here). If I run again the libraries, the figure is now interactive. Do you know why?
Static image:
Interactive image:
You need to set the backend before importing pyplot. Therefore the order of your command matters. You will need to put any %matplotlib ... command before importing pyplot:
%matplotlib notebook
import matplotlib.pyplot as plt

python kernel crashes on mouse hover over Tkinter window

I want to plot graph in jupiter notebook.
When I use the following code
%pylab inline
import numpy as np
x=np.linspace(0,10,40)
plt.plot(x,x**2)
plt.show()
everything works fine but if I change %pylab inline to %pylab tk or %pylab qt an interactive graph in separate window is shown and when I hover the mouse over the window python kernel crashes. Does anyone has idea how to solve this problem and plot graphs in separate windows?
I use Windows 7, Python 3.5.1 from Anaconda 2.4.1 (64-bit) distribution.
If you want matplotlib interactive, i.e. the plots open in a separate window, you will want to execute the first cell of your notebook with the following magic:
%matplotlib
This should load an interactive backend for your system
If you want to work inline:
%matplotlib inline
Then you can run your code, but please, do not use pylab, use numpy and matplotlib.pyplot instead; this will keep your namespaces tidy.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,40)
plt.plot(x, x**2)
plt.show()
To change back end during a session, you may have to restart your kernel in jupyter for the new backend settings to take effect.

in Ipython notebook / Jupyter, Pandas is not displaying the graph I try to plot

I am trying to plot some data using pandas in Ipython Notebook, and while it gives me the object, it doesn't actually plot the graph itself. So it looks like this:
In [7]:
pledge.Amount.plot()
Out[7]:
<matplotlib.axes.AxesSubplot at 0x9397c6c>
The graph should follow after that, but it simply doesn't appear. I have imported matplotlib, so that's not the problem. Is there any other module I need to import?
Note that --pylab is deprecated and has been removed from newer builds of IPython, The recommended way to enable inline plotting in the IPython Notebook is now to run:
%matplotlib inline
import matplotlib.pyplot as plt
See this post from the ipython-dev mailing list for more details.
Edit:Pylab has been deprecated please see the current accepted answer
Ok, It seems the answer is to start ipython notebook with --pylab=inline.
so ipython notebook --pylab=inline
This has it do what I saw earlier and what I wanted it to do.
Sorry about the vague original question.
With your import matplotlib.pyplot as plt just add
plt.show()
and it will show all stored plots.
simple after importing the matplotlib you have execute one magic if you have started the ipython as like this
ipython notebook
%matplotlib inline
run this command everything will be shown perfectly
start ipython with ipython notebook --pylab inline ,then graph will show inline.
import matplotlib as plt
%matplotlib as inline
All you need to do is to import matplotlib.
import matplotlib.pyplot as plt

Categories

Resources