簡體   English   中英

如何在 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)

(我在虛擬環境中的 Ubuntu 16.04 上運行 Python 3.5.2、Jupyter 4.4.0、ipywidgets 7.2.1。)

如果我將此代碼放在筆記本的第一行並運行它,我會看到一個帶有兩個選項卡的選項卡小部件,每個選項卡都顯示一個字符串,但不顯示繪圖:

沒有地塊

如果我第二次運行它,或者如果我重新運行它,將matplotlib導入后的所有內容都放在第二個單元格中,我會看到一個選項卡小部件,每個選項卡上都有一個圖,但是我第二次顯示這兩個圖選項卡。

太多的情節

我可以通過將我的代碼包裝在對plt.ioffplt.ion調用中來擺脫額外的顯示,但有人向我建議這是一個黑客。 無論如何,它不會使 matplotlib 在第一個單元格中顯示繪圖。

問題:在選項卡內顯示圖的正確方法是什么?

我添加了一些東西來讓你的代碼像你想要的那樣工作

  • 在單元格頂部%matplotlib inline添加%matplotlib inline
  • plt.show(fig)調用替換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)

上面來自ac24的答案中的plt.show(fig)現在已棄用:

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) )是僅關鍵字調用。

from IPython.display 導入顯示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM