如何在 Jupyter 选项卡小部件中显示 matplotlib 图? [英] How to display matplotlib plots in a Jupyter tab widget?

查看:26
本文介绍了如何在 Jupyter 选项卡小部件中显示 matplotlib 图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法在 Jupyter 选项卡小部件中显示绘图.考虑以下片段:

I am having trouble displaying plots inside of Jupyter tab widgets. Consider the following snippet:

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)

(我在虚拟环境中的 Ubuntu 16.04 上运行 Python 3.5.2、Jupyter 4.4.0、ipywidgets 7.2.1.)

(I am running Python 3.5.2, Jupyter 4.4.0, ipywidgets 7.2.1 on Ubuntu 16.04 inside a virtual environment.)

如果我将此代码放在笔记本的第一行并运行它,我会看到一个带有两个选项卡的选项卡小部件,每个选项卡都显示一个字符串,但不显示绘图:

If I put this code on the first row of the notebook and run it, I see a tab widget with two tabs, each one of which displays a string, but not the plot:

如果我第二次运行它,或者如果我在第二个单元格中将 matplotlib 导入后的所有内容重新运行,我会看到一个选项卡小部件,每个选项卡上都有一个图,但我在选项卡外再次显示两个图.

If I run it for a second time, or if I rerun it putting everything after the import of matplotlib in a second cell, I see a tab widget with one plot on each tab, but I get the two plots displayed a second time outside of the tabs.

我可以通过将我的代码包装在对 plt.ioffplt.ion 的调用中来摆脱额外的显示,但是 有人建议我 这是一个黑客.无论如何,它不会让 matplotlib 在第一个单元格中显示绘图.

I can get rid of the additional displays by wrapping my code inside calls to plt.ioff and plt.ion, but it has been suggested to me that this is a hack. And in any case, it does not make matplotlib display the plots in the first cell.

问题:在选项卡内显示图表的正确方法是什么?

Question: What is the proper way of displaying plots inside tabs?

推荐答案

我添加了一些东西来让你的代码如你所愿

I added a couple of things to make your code work as you would like

  • 在单元格顶部添加%matplotlib inline
  • 将您的 display(fig) 调用替换为 plt.show(fig) 调用.
  • Add %matplotlib inline at the top of the cell
  • Replace your display(fig) calls with plt.show(fig) calls.
%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)

这篇关于如何在 Jupyter 选项卡小部件中显示 matplotlib 图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆