Python 如何更改Jupyter笔记本中不同单元格中的matplotlib图形?

Python 如何更改Jupyter笔记本中不同单元格中的matplotlib图形?,python,matplotlib,jupyter-notebook,Python,Matplotlib,Jupyter Notebook,我正在学习如何使用Jupyter笔记本中的matplotlib创建和修改绘图。我在笔记本的开头添加了以下神奇函数和导入语句: %matplotlib inline import numpy as np import matplotlib.pyplot as plt 然后,我创建了一个单元格并添加了以下所有代码: x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = x plt.figure() plt.scatter(x[:2], y[:2], s=100,

我正在学习如何使用Jupyter笔记本中的matplotlib创建和修改绘图。我在笔记本的开头添加了以下神奇函数和导入语句:

%matplotlib inline
import numpy as np 
import matplotlib.pyplot as plt
然后,我创建了一个单元格并添加了以下所有代码:


x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x
plt.figure()
plt.scatter(x[:2], y[:2], s=100, c='red', label='Red data')
plt.scatter(x[2:], y[2:], s = 100, c='blue', label='Blue data')
plt.xlabel('This is my x label')
plt.ylabel('This is my y label')
plt.title('This is my plot title')
在这种情况下,绘图本身看起来很好,尽管我不明白为什么会添加额外的
文本(0.5,1.0,“这是我的绘图标题”)
行,而与xlabel和ylabel文本对象无关。

现在,我发现总是必须将与一个绘图相关的每个命令强制放在一个单元格中是不切实际的。我希望能够在一个单元格中创建基本绘图,并在另一个单元格中为其添加标签和图例(稍后对绘图进行其他操作,但这不是本问题的主题)。为了实现这一点,我需要引用在第一个单元格中创建的绘图-为此,我使用了
plt.gcf()
。但是,当我运行以下代码时,Python/matplotlib/Jupyter会将不同的单元格完全视为不同的绘图。(注:虚线分隔表示不同的Jupyter笔记本单元。)

结果如下:

我尝试将
%matplotlib inline
更改为显然更现代的
%matplotlib笔记本
,但没有效果。我还尝试从单元格的开头删除
plt.gcf()
行,但仍然得到相同的输出

编辑 我的版本是:

  • Python 3.7.0
  • matplotlib 3.2.2
  • ipykernel 5.2.1
  • ipywidgets 7.5.1
  • jupyter 1.0.0
  • jupyter_核心4.6.3
  • jupyter_客户机6.1.6
  • 笔记本电脑6.0.3
  • 视窗10

将图形保存为变量,如
fig
,然后使用
fig.gca()
获取当前轴(用于其他绘图命令)即可

首先导入包并使用matplotlib内联环境:

导入matplotlib.pyplot作为plt
将numpy作为np导入
%matplotlib内联
然后获取数据并为其创建散点图(同时将该图保存为图形)

#生成一些随机数据
x=np.arange(1,3)
y=x
x2=np.arange(3,11)
y2=x2
x3=np.arange(11,21)
y3=x3
#创建初始图形
图=plt.图()
plt.散射(x,y,线宽=5)

然后使用
fig.gca()
技巧绘制更多数据(
fig
行显示单元格下的绘图):

fig.gca().散射(x2,y2,color='r',线宽=5)
无花果

添加最终数据:

图gca().散射(x3,y3,color='g',线宽=5)
无花果

添加图例:

fig.legend(['Blue Data','Red Data','Green Data'],loc='右下角')
无花果

最后,添加x/y标签和标题:

fig.gca().setxlabel(“我的x标签”)
图gca().set_ylabel(“我的y标签”)
图gca().设置标题(“标题”)
无花果


从我的代码中可以看出,对绘图的每次添加(数据、轴标题等)都是在单独的单元格中完成的将图形保存到变量中,如
fig
,然后使用
fig.gca()
获取当前轴(用于其他绘图命令)即可

首先导入包并使用matplotlib内联环境:

导入matplotlib.pyplot作为plt
将numpy作为np导入
%matplotlib内联
然后获取数据并为其创建散点图(同时将该图保存为图形)

#生成一些随机数据
x=np.arange(1,3)
y=x
x2=np.arange(3,11)
y2=x2
x3=np.arange(11,21)
y3=x3
#创建初始图形
图=plt.图()
plt.散射(x,y,线宽=5)

然后使用
fig.gca()
技巧绘制更多数据(
fig
行显示单元格下的绘图):

fig.gca().散射(x2,y2,color='r',线宽=5)
无花果

添加最终数据:

图gca().散射(x3,y3,color='g',线宽=5)
无花果

添加图例:

fig.legend(['Blue Data','Red Data','Green Data'],loc='右下角')
无花果

最后,添加x/y标签和标题:

fig.gca().setxlabel(“我的x标签”)
图gca().set_ylabel(“我的y标签”)
图gca().设置标题(“标题”)
无花果


从我的代码中可以看出,对绘图的每次添加(数据、轴标题等)都是在单独的单元格中完成的

如果没有将第一行作为

%matplotlib inline
你用

%matplotlib notebook
例如,请参见讨论。(您需要重新启动内核才能执行此操作。)

另外,请记住pyplot接口“用于交互式绘图和编程绘图生成的简单案例”


对于构建更复杂的情节,就像你正在做的那样,OO接口更强大。例如,使用可以轻松创建两个轴,在一个单元格中为每个轴设置标题,在下一个单元格中为每个轴设置标签。保存和处理每件事都要容易得多。

如果不把第一行作为

%matplotlib inline
你用

%matplotlib notebook
例如,请参见讨论。(您需要重新启动内核才能执行此操作。)

另外,请记住pyplot接口“用于交互式绘图和编程绘图生成的简单案例”


对于构建更复杂的情节,就像你正在做的那样,OO接口更强大。例如,使用可以轻松创建两个轴,在一个单元格中为每个轴设置标题,在下一个单元格中为每个轴设置标签。保存和处理每件事都要容易得多。

这非常有帮助,非常感谢@Jacob K!我刚刚注意到,尽管使用了顶部的
%matplotlib笔记本
magic,但这些输出图不是交互式的。没有用于缩放的控件,没有aut