del*_*onX 19 python matplotlib jupyter-notebook
我正在使用Jupyter Notebook绘制饼图数字.
在我的代码的第一个单元格中,我有一个魔术命令%matplotlib inline,在这个魔术命令后我运行我的代码,一切正常,我的图形呈现.
但在第二个单元格中,当我设置%matplotlib notebook交互式绘图时,我的图形在运行第二个单元格后将无法呈现.
我需要重新启动内核并%matplotlib notebook再次运行单元格,并且%matplotlib inline在此之前无法运行命令.
这里是我的代码,第一个单元格用%matplotlib inline,这使得罚款:
import matplotlib.pyplot as plt
%matplotlib inline
labels = "No", "Yes"
sizes = [100, 50]
fig, ax = plt.subplots(figsize=(6, 6))
_, texts, autotexts = ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',
             shadow=False, startangle=90)
ax.axis('equal')
之后,我有第二个单元格具有相同的代码,只是%matplotlib inline改为%matplotlib notebook.在运行此单元格后,图形将不会呈现,我需要重新启动内核并再次运行此单元格.
为什么?
Imp*_*est 26
您的命令顺序错误.在jupyter中导入pyplot之前应该设置后端.或者换句话说,在更改后端之后,需要再次导入pyplot.
因此,%matplotlib ...在导入pyplot之前调用.
在第一个细胞中:
%matplotlib inline
import matplotlib.pyplot as plt
plt.plot([1,1.6,3])
在第二个细胞中:
%matplotlib notebook
#calling it a second time may prevent some graphics errors
%matplotlib notebook  
import matplotlib.pyplot as plt
plt.plot([1,1.6,3])
编辑:事实证明,您实际上可以在 jupyter 上动态更改后端。仍然在这里留下答案,因为我认为它是相关的,并解释了一些有时会出现的 matplotlib 魔法。
如源代码中所示,魔术命令正在调用matplotlib.pyplot.switch_backend(newbackend)以更改后端。正如 matplotlib 的文档中所述:
matplotlib.pyplot.switch_backend(newbackend)
切换默认后端。此功能是实验性的,预计只能切换到图像后端。例如,如果您想从交互式 ipython 会话中运行一堆 PostScript 脚本,您可能希望在运行它们之前切换到 PS 后端,以避免弹出一堆 GUI 窗口。如果您尝试以交互方式从一个 GUI 后端切换到另一个,您将爆炸..
所以真的每次切换后端都要重启内核,因为matplotlib用完后切换后端有问题。
这个问题主要是由于 GUI 后端的不同主循环之间的不兼容造成的。因为通常每个后端还要处理线程和用户输入,所以您不能同时运行 Qt 和 Tkinter。所以这个限制会延续到 jupyter。
另请参阅此问题:如何在 matplotlib / Python 中切换后端
| 归档时间: | 
 | 
| 查看次数: | 24025 次 | 
| 最近记录: |