IPython notebook 在 plt.show() 之后停止评估单元格

Posted

技术标签:

【中文标题】IPython notebook 在 plt.show() 之后停止评估单元格【英文标题】:IPython notebook stops evaluating cells after plt.show() 【发布时间】:2015-04-28 07:13:27 【问题描述】:

我正在使用 iPython 进行一些编码。当我打开笔记本并通过 SHIFT+ENTER 运行一些代码时,它会运行。但是一两次之后,它就会停止提供任何输出。这是为什么。我必须关闭笔记本再次打开它,然后它会运行几次并再次出现同样的问题。

这是我使用的代码。

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 [ ]:

【问题讨论】:

可能相关:***.com/questions/45760693/… 【参考方案1】:

您不应在笔记本中使用plt.show()。这将打开一个外部窗口,阻止对您的单元格进行评估。

改为以%matplotlib inline 或酷炫的新%matplotlib notebook 开始您的笔记本(后者仅适用于matplotlib >= 1.4.3 和ipython >= 3.0)

对每个单元格进行评估后,(仍然打开的)图形对象会自动显示在您的笔记本中。

这个最小的代码示例适用于笔记本。注意它不会调用plt.show()

%matplotlib inline
import matplotlib.pyplot as plt

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

_ = plt.plot(x,y)

%matplotlib inline 只是显示图像。

%matplotlib notebook 是最近添加的,它提供了交互式后端的许多很酷的功能(缩放、测量...):

【讨论】:

你是摇滚明星!我爱你,也爱这个网站:-)。它有帮助。非常感谢! 这是一个你可能会再次看到的问题。有时将图表弹出到新窗口中会很好,因为您可以与它进行交互。当我忘记这一点时,我偶尔也会想同样的事情。 @FredMitchell,我已经更新了我的答案。 %matplotlib notebook 带来了交互式后端的一些优势。我真的很期待ipython-3.0 的发布。 嗨,Cel。我现在在笔记本上再次面临类似的问题。现在,当我执行 shift + Enter 时,它不会打印它之前执行的命令的结果。就像我有一个数据框说 df.然后如果我写这个:df 然后执行 SHIFT+ENTER 它不会打印 df。我现在必须写 print(df) 才能看到它。之前它曾经像 python 解释器一样打印。 嗨@Manish。我建议创建一个最小的可重现示例笔记本并提出一个新问题。目前我想不出这种行为的原因。

以上是关于IPython notebook 在 plt.show() 之后停止评估单元格的主要内容,如果未能解决你的问题,请参考以下文章

安装anaconda-换源-安装ipython-安装ipython notebook

如何在win7 64下安装ipython notebook

IPython Notebook:代码重用

ipython notebook环境搭建

服务器(Ubuntu)远程访问ipython notebook(服务器运行ipython notebook 本地浏览器访问)

在 IPython/Jupyter Notebooks 中显示行号