IPython notebook stops evaluating cells after plt.show()
Question: 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 [ ]:
    


Answer: 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.
![inline](http://i.stack.imgur.com/A7fHd.png)

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

![webagg](http://i.stack.imgur.com/Af7UF.png)

