如何在 Jupyter 选项卡小部件中显示 matplotlib 图?
How to display matplotlib plots in a Jupyter tab widget?
我无法在 Jupyter 选项卡小部件中显示绘图。考虑以下片段:
import matplotlib.pyplot as plt
import pandas as pd
import ipywidgets as widgets
import numpy as np
out1 = widgets.Output()
out2 = widgets.Output()
data1 = pd.DataFrame(np.random.normal(size = 50))
data2 = pd.DataFrame(np.random.normal(size = 100))
with out1:
fig1, axes1 = plt.subplots()
data1.hist(ax = axes1)
display(fig1)
with out2:
fig2, axes2 = plt.subplots()
data2.hist(ax = axes2)
display(fig2)
tab = widgets.Tab(children = [out1, out2])
tab.set_title(0, 'First')
tab.set_title(1, 'Second')
display(tab)
(我在 运行ning Python 3.5.2、Jupyter 4.4.0、ipywidgets 7.2.1 on Ubuntu 16.04 虚拟环境中。)
如果我将此代码放在笔记本的第一行 运行,我会看到一个带有两个选项卡的选项卡小部件,每个选项卡显示一个字符串,但不显示绘图:
如果我第二次 运行 它,或者如果我重新 运行 它将导入 matplotlib
之后的所有内容放在第二个单元格中,我会看到一个选项卡小部件每个选项卡上有一个图,但我在选项卡之外第二次显示了两个图。
我可以通过将我的代码包装在对 plt.ioff
和 plt.ion
的调用中来摆脱额外的显示,但是 it has been suggested to me 这是一个 hack。无论如何,它不会让 matplotlib 在第一个单元格中显示绘图。
问题:在选项卡中显示绘图的正确方法是什么?
我添加了一些内容以使您的代码按您的意愿工作
- 在单元格顶部添加
%matplotlib inline
- 将您的
display(fig)
次通话替换为 plt.show(fig)
次通话。
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import ipywidgets as widgets
import numpy as np
out1 = widgets.Output()
out2 = widgets.Output()
data1 = pd.DataFrame(np.random.normal(size = 50))
data2 = pd.DataFrame(np.random.normal(size = 100))
tab = widgets.Tab(children = [out1, out2])
tab.set_title(0, 'First')
tab.set_title(1, 'Second')
display(tab)
with out1:
fig1, axes1 = plt.subplots()
data1.hist(ax = axes1)
plt.show(fig1)
with out2:
fig2, axes2 = plt.subplots()
data2.hist(ax = axes2)
plt.show(fig2)
从IPython.display导入显示
plt.show(fig)
来自 ac24 的上述答案现已弃用:
In [1]: import matplotlib.pyplot as plt
In [2]: fig = plt.figure()
In [3]: plt.show(fig)
<ipython-input-3-d1fd62acb551>:1: MatplotlibDeprecationWarning: Passing the
block parameter of show() positionally is deprecated since Matplotlib 3.1; the
parameter will become keyword-only in 3.3.
plt.show(fig)
plt.show(block=True)
(或plt.show(block=False)
)是仅关键字调用。
我无法在 Jupyter 选项卡小部件中显示绘图。考虑以下片段:
import matplotlib.pyplot as plt
import pandas as pd
import ipywidgets as widgets
import numpy as np
out1 = widgets.Output()
out2 = widgets.Output()
data1 = pd.DataFrame(np.random.normal(size = 50))
data2 = pd.DataFrame(np.random.normal(size = 100))
with out1:
fig1, axes1 = plt.subplots()
data1.hist(ax = axes1)
display(fig1)
with out2:
fig2, axes2 = plt.subplots()
data2.hist(ax = axes2)
display(fig2)
tab = widgets.Tab(children = [out1, out2])
tab.set_title(0, 'First')
tab.set_title(1, 'Second')
display(tab)
(我在 运行ning Python 3.5.2、Jupyter 4.4.0、ipywidgets 7.2.1 on Ubuntu 16.04 虚拟环境中。)
如果我将此代码放在笔记本的第一行 运行,我会看到一个带有两个选项卡的选项卡小部件,每个选项卡显示一个字符串,但不显示绘图:
如果我第二次 运行 它,或者如果我重新 运行 它将导入 matplotlib
之后的所有内容放在第二个单元格中,我会看到一个选项卡小部件每个选项卡上有一个图,但我在选项卡之外第二次显示了两个图。
我可以通过将我的代码包装在对 plt.ioff
和 plt.ion
的调用中来摆脱额外的显示,但是 it has been suggested to me 这是一个 hack。无论如何,它不会让 matplotlib 在第一个单元格中显示绘图。
问题:在选项卡中显示绘图的正确方法是什么?
我添加了一些内容以使您的代码按您的意愿工作
- 在单元格顶部添加
%matplotlib inline
- 将您的
display(fig)
次通话替换为plt.show(fig)
次通话。
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import ipywidgets as widgets
import numpy as np
out1 = widgets.Output()
out2 = widgets.Output()
data1 = pd.DataFrame(np.random.normal(size = 50))
data2 = pd.DataFrame(np.random.normal(size = 100))
tab = widgets.Tab(children = [out1, out2])
tab.set_title(0, 'First')
tab.set_title(1, 'Second')
display(tab)
with out1:
fig1, axes1 = plt.subplots()
data1.hist(ax = axes1)
plt.show(fig1)
with out2:
fig2, axes2 = plt.subplots()
data2.hist(ax = axes2)
plt.show(fig2)
从IPython.display导入显示
plt.show(fig)
来自 ac24 的上述答案现已弃用:
In [1]: import matplotlib.pyplot as plt
In [2]: fig = plt.figure()
In [3]: plt.show(fig)
<ipython-input-3-d1fd62acb551>:1: MatplotlibDeprecationWarning: Passing the
block parameter of show() positionally is deprecated since Matplotlib 3.1; the
parameter will become keyword-only in 3.3.
plt.show(fig)
plt.show(block=True)
(或plt.show(block=False)
)是仅关键字调用。