IPython notebook stops evaluating cells after plt.

2019-02-25 09:51发布

问题:

I am using iPython to do some coding. When I open the notebook and run some codes by doing SHIFT+ENTER it runs. But after one or two times, it stops giving any output. Why is that. I have to shutdown the notebook again open it and then it runs for few times and same problem again.

Here is the code I have used.

Cell Toolbar:
Question 1: Rotational Invariance of PCA
I(1): Importing the data sets and plotting a scatter plot of the two.
In [1]:

# Channging the working directory
import os
os.getcwd()
path="/Users/file/"
os.chdir(path)
pwd=os.getcwd()
print(pwd)

# Importing the libraries

import pandas as pd
import numpy as np
import scipy as sp

# Mentioning the files to be imported
file=["2d-gaussian.csv","2d-gaussian-rotated.csv"]
# Importing the two csv files in pandas dataframes
XI=pd.read_csv(file[0],header=None)
XII=pd.read_csv(file[1],header=None)
#XI
XII



Out[5]:
0   1
0   1.372310    -2.111748
1   -0.397896   1.968246
2   0.336945    1.338646
3   1.983127    -2.462349
4   -0.846672   0.606716
5   0.582438    -0.645748
6   4.346416    -4.645564
7   0.830186    -0.599138
8   -2.460311   2.096945
9   -1.594642   2.828128
10  3.767641    -3.401645
11  0.455917    -0.224665
12  2.878315    -2.243932
13  -1.062223   0.142675
14  -0.698950   1.113589
15  -4.681619   4.289080
16  0.411498    -0.041293
17  0.276973    0.187699
18  1.500835    -0.284463
19  -0.387535   -0.265205
20  3.594708    -2.581400
21  2.263455    -2.660592
22  -1.686090   1.566998
23  1.381510    -0.944383
24  -0.085535   -1.697205
25  1.030609    -1.448967
26  3.647413    -3.322129
27  -3.474906   2.977695
28  -7.930797   8.506523
29  -0.931702   1.440784
... ... ...
70  4.433750    -2.515612
71  1.495646    -0.058674
72  -0.928938   0.605706
73  -0.890883   -0.005911
74  -2.245630   1.333171
75  -0.707405   0.121334
76  0.675536    -0.822801
77  1.975917    -1.757632
78  -1.239322   2.053495
79  -2.360047   1.842387
80  2.436710    -1.445505
81  0.348497    -0.635207
82  -1.423243   -0.017132
83  0.881054    -1.823523
84  0.052809    1.505141
85  -2.466735   2.406453
86  -0.499472   0.970673
87  4.489547    -4.443907
88  -2.000164   4.125330
89  1.833832    -1.611077
90  -0.944030   0.771001
91  -1.677884   1.920365
92  0.372318    -0.474329
93  -2.073669   2.020200
94  -0.131636   -0.844568
95  -1.011576   1.718216
96  -1.017175   -0.005438
97  5.677248    -4.572855
98  2.179323    -1.704361
99  1.029635    -0.420458
100 rows × 2 columns
The two raw csv files have been imported as data frames. Next we will concatenate both the dataframes into one dataframe to plot a combined scatter plot
In [6]:

# Joining two dataframes into one. 
df_combined=pd.concat([XI,XII],axis=1,ignore_index=True)
df_combined

Out[6]:
0   1   2   3
0   2.463601    -0.522861   1.372310    -2.111748
1   -1.673115   1.110405    -0.397896   1.968246
2   -0.708310   1.184822    0.336945    1.338646
3   3.143426    -0.338861   1.983127    -2.462349
4   -1.027700   -0.169674   -0.846672   0.606716
5   0.868458    -0.044767   0.582438    -0.645748
6   6.358290    -0.211529   4.346416    -4.645564
7   1.010685    0.163375    0.830186    -0.599138
8   -3.222466   -0.256939   -2.460311   2.096945
9   -3.127371   0.872207    -1.594642   2.828128
10  5.069451    0.258798    3.767641    -3.401645
11  0.481244    0.163520    0.455917    -0.224665
12  3.621976    0.448577    2.878315    -2.243932
13  -0.851991   -0.650218   -1.062223   0.142675
14  -1.281659   0.293194    -0.698950   1.113589
15  -6.343242   -0.277567   -4.681619   4.289080
16  0.320172    0.261774    0.411498    -0.041293
17  0.063126    0.328573    0.276973    0.187699
18  1.262396    0.860105    1.500835    -0.284463
19  -0.086500   -0.461557   -0.387535   -0.265205
20  4.367168    0.716517    3.594708    -2.581400
21  3.481827    -0.280818   2.263455    -2.660592
22  -2.300280   -0.084211   -1.686090   1.566998
23  1.644655    0.309095    1.381510    -0.944383
24  1.139623    -1.260587   -0.085535   -1.697205
25  1.753325    -0.295824   1.030609    -1.448967
26  4.928210    0.230011    3.647413    -3.322129
27  -4.562678   -0.351581   -3.474906   2.977695
28  -11.622940  0.407100    -7.930797   8.506523
29  -1.677601   0.359976    -0.931702   1.440784
... ... ... ... ...
70  4.913941    1.356329    4.433750    -2.515612
71  1.099070    1.016093    1.495646    -0.058674
72  -1.085156   -0.228560   -0.928938   0.605706
73  -0.625769   -0.634129   -0.890883   -0.005911
74  -2.530594   -0.645206   -2.245630   1.333171
75  -0.586007   -0.414415   -0.707405   0.121334
76  1.059484    -0.104132   0.675536    -0.822801
77  2.640018    0.154351    1.975917    -1.757632
78  -2.328373   0.575707    -1.239322   2.053495
79  -2.971570   -0.366041   -2.360047   1.842387
80  2.745141    0.700888    2.436710    -1.445505
81  0.695584    -0.202735   0.348497    -0.635207
82  -0.994271   -1.018499   -1.423243   -0.017132
83  1.912425    -0.666426   0.881054    -1.823523
84  -1.026954   1.101637    0.052809    1.505141
85  -3.445865   -0.042626   -2.466735   2.406453
86  -1.039549   0.333189    -0.499472   0.970673
87  6.316906    0.032272    4.489547    -4.443907
88  -4.331379   1.502719    -2.000164   4.125330
89  2.435918    0.157511    1.833832    -1.611077
90  -1.212710   -0.122350   -0.944030   0.771001
91  -2.544347   0.171460    -1.677884   1.920365
92  0.598670    -0.072133   0.372318    -0.474329
93  -2.894802   -0.037809   -2.073669   2.020200
94  0.504119    -0.690281   -0.131636   -0.844568
95  -1.930254   0.499670    -1.011576   1.718216
96  -0.715406   -0.723096   -1.017175   -0.005438
97  7.247917    0.780923    5.677248    -4.572855
98  2.746180    0.335849    2.179323    -1.704361
99  1.025371    0.430754    1.029635    -0.420458
100 rows × 4 columns
Plotting two separate scatter plot of all the four columns onto one scatter diagram
In [ ]:

import matplotlib.pyplot as plt

# Fucntion for scatter plot

def scatter_plot():

    # plots scatter for first two columns(Unrotated Gaussian data)
    plt.scatter(df_combined.ix[:,0], df_combined.ix[:,1],color='red',marker='+')
    # plots scatter for Rotated Gaussian data
    plt.scatter(df_combined.ix[:,2], df_combined.ix[:,3] ,color='green', marker='x')
    legend = plt.legend(loc='upper right')
# set ranges of x and y axes
    plt.xlim([-12,12])
    plt.ylim([-12,12])
    plt.show()

# Function call
scatter_plot()



In [ ]:

def plot_me1():

    # create figure and axes
    fig = plt.figure()
    # split the page into a 1x1 array of subplots and put me in the first one (111)
    # (as a matter of fact, the only one)
    ax = fig.add_subplot(111)

    # plots scatter for x, y1
    ax.scatter(df_combined.ix[:,0], df_combined.ix[:,1], color='red', marker='+', s=100)
    # plots scatter for x, y2
    ax.scatter(df_combined.ix[:,2], df_combined.ix[:,3], color='green', marker='x', s=100)
    plt.xlim([-12,12])
    plt.ylim([-12,12])
    plt.show()

plot_me1()
In [ ]:

回答1:

You should not use plt.show() in the notebook. This will open an external window that blocks the evaluation of your cell.

Instead begin your notebooks with %matplotlib inline or the cool new %matplotlib notebook (the latter is only possible with matplotlib >= 1.4.3 and ipython >= 3.0)

After the evaluation of each cell, the (still open) figure object is automatically shown in your notebook.

This minimal code example works in notebook. Note that it does not call plt.show()

%matplotlib inline
import matplotlib.pyplot as plt

x = [1,2,3]
y = [3,2,1]

_ = plt.plot(x,y)

%matplotlib inline simply displays the image.

%matplotlib notebook was added recently and offers many of the cool features (zooming, measuring,...) of the interactive backends: