問題

以下程式不適用於非GUI環境。 我想讓這個程式在呼叫plt.show時將圖儲存到臨時png檔案.

 import matplotlib.pyplot as plt
plt.scatter(2,3)
plt.scatter(4,5)
plt.show()
 

我知道這可以透過使用plt.savefig而不是plt.show(參考儲存圖到影象檔案而不是使用Matplotlib 顯示它)來解決.但我不想改變程式本身.該程式可能由可能熟悉在GUI環境中使用matplotlib的其他使用者提供.

所以我考慮將matplotlib的後端更改為我自己的後端,這會改變show的行為.它可以透過更改matplotlibrc來完成. 但關於後端的文件只解釋瞭如何選擇“built-in”後端: https://matplotlib.org/faq/usage_faq.html?highlight=backend#coding-styles

文件說後端可以指定為module://my_backend,但它沒有定義my_backend的“介面”(應該在哪個名稱中實現哪種型別/物件?)

是否有任何文件解釋後端的介面? (或者show的其他解決方法更改行為?)

  最佳答案

最小的後端可能看起來像這樣,我們只是從agg後端獲取圖形畫布(因此能夠使用所有相關方法)

 from matplotlib.backend_bases import Gcf
from matplotlib.backends.backend_agg import FigureCanvasAgg

FigureCanvas = FigureCanvasAgg

def show(*args, **kwargs):
    for num, figmanager in enumerate(Gcf.get_all_fig_managers()):
        figmanager.canvas.figure.savefig(f"figure_{num}.png")
 

如果您將其儲存為 mybackend.py,您可以透過 matplotlib.use("module://mybackend") 將其作為後端使用。

 import matplotlib
matplotlib.use("module://mybackend")
import matplotlib.pyplot as plt

plt.figure()
plt.plot([1,3,2])

plt.figure()
plt.scatter([1,2,3], [3,2,3], color="crimson")

plt.show()
 

  相同標籤的其他問題

pythonmatplotlib