簡體   English   中英

當 plt.plot() 調用在其他單元格中完成時 plt.show() 為空

[英]plt.show() is empty when the plt.plot() calls are done in other cells

語境

我必須為物理作業寫一個 Jupyter 筆記本,我必須繪制一些圖表來顯示某些量的演變等......

我每次都必須通過在代碼和 Markdown 單元格之間交替來解釋我編寫的幾乎每一行代碼,包括plot()調用,這就是我的問題的來源。 用非常簡單的術語來說,我有類似的東西:


我的代碼

我們首先導入matplotlib.pyplot模塊:

from matplotlib import pyplot as plt

接下來,我們從數據創建值列表:

# making up stuff
x_values = range(10)
doubles = [x * 2 for x in x_values]
squares = [x**2 for x in x_values]

我們首先繪制doubles曲線:

%matplotlib inline

plt.plot(x_values, doubles, color='red', label='x * 2')

它顯示了雙打的圖表(僅適用於雙打)

然后我們繪制squares

%matplotlib inline

plt.plot(x_values, squares, color='red', label='x^2')

它顯示了正方形的圖形(並且僅顯示了正方形)

最后,我們配置我們的圖表並顯示它:

%matplotlib inline

plt.xlabel("x")
plt.ylabel("f(x)")
plt.ylim(0, 50)
plt.xlim(0, 11)
plt.legend()
plt.grid(True)
plt.show()

它顯示一個空圖,標簽、網格和限制設置正確,但根本沒有曲線或圖例


預期的

最后一個單元格顯示了帶有兩條曲線和圖例以及我配置的所有內容的圖形

會發生什么/我的問題

最后一個單元格顯示一個沒有曲線或圖例的空圖

我試過的

但是,如果我嘗試將plot()調用放在最后一個單元格中,以及所有其他內容,我確實會得到預期的圖形、曲線、圖例等......但我不能用我的實際分配來做到這一點,很遺憾 :/

我還嘗試了%matplotlib inline行的幾乎所有值,我嘗試了多個單元格、多個位置等......但它並沒有解決我的問題

通過谷歌搜索,似乎筆記本的第一行在 matplotlib 和所有這些方面的行為有點不同,但這幾乎不是我筆記本中的第一個單元格,所以不可能是這樣。

老實說,我不知道為什么會這樣。 我想我在某處pyplot作為一種狀態機工作,所以也許它分布在多行上的事實使它感到困惑,但對於其他事物(標簽、樣式等...),它按預期工作,所以我現在一無所知。

所以我想我的問題是:這是正常行為,是錯誤,還是我只是遺漏了什么?

編輯:似乎使用fig, ax = plt.subplots(1, 1)然后在ax繪圖,但問題是它增加了我無法輕易解釋的復雜性,它相當笨重,而且它沒有t 回答“為什么當它在同一個單元格中時它起作用,而當線條在不同的單元格中時它不起作用?”

如果您不想使用figax ,那么一個(可能不是很優雅)但更容易解釋的解決方案是編輯最后一個單元格,如下所示:

plt.plot(x_values, doubles, x_values, squares)

代替

plt.plot()

這是 Jupyter Notebook 的正常行為。 它期望一個繪圖的所有命令都在同一個單元格中,然后當單元格結束時,它會呈現繪圖。 這就是為什么你不需要plt.show() 順便說一句,除非您想在不同的顯示模式之間切換,否則每個筆記本只需要%matplotlib inline一次 IPython 魔術命令%matplotlib inline

要注釋每一行繪圖命令,您當然可以只在單元格中使用 Python 注釋。 如果必須使用 Markdown,一個簡單的解決方法是通過數字注釋枚舉命令行,或者只是在某些重要行設置注釋,然后在下一個 Markdown 單元格中引用這些數字。

請注意,此注釋問題並非特定於繪圖。 例如,您將如何注釋函數定義的每一行? 整個定義必須在一個單元格中。

暫無
暫無

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

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