99

次の問題で悩んでいます。グラフのコレクションで構成されるレポートを生成する必要があります。これらのグラフはすべて、1 つを除いて、Matplotlib の既定のバックエンド (TkAgg) を使用して作成されています。Cairo バックエンドを使用して 1 つのグラフを作成する必要があります。その理由は、igraph グラフをプロットしていて、Cairo を使用してのみプロットできるためです。

問題は、バックエンドをオンザフライで変更できないことです。たとえば、次のように動作しません:
matplotlib.pyplot.switch_backend('cairo.png') (switch_backend 機能が実験的であることはわかっています)。

私も試しましたが、ステートメントは import の前に来る必要がmatplotlib.use("cairo.png")あるため、これはインポートの問題につながります。しかし、スクリプトの存続期間中に 2 つの異なるバックエンドが必要です。matplotlib.use("cairo.png")matplotlib.pyplot

だから私の質問は、誰かが Matplotlib でバックエンドを切り替える方法を示すコード スニペットを持っているかということです。

本当にありがとう!

更新: matplotlib をロードし、デフォルトのバックエンドを表示し、matplotlib をアンロードし、再ロードしてバックエンドを変更するスニペットを作成しました。

import matplotlib
import matplotlib.pyplot as plt
import sys
print matplotlib.pyplot.get_backend()

modules = []
for module in sys.modules:
    if module.startswith('matplotlib'):
        modules.append(module)

for module in modules:
    sys.modules.pop(module)

import matplotlib
matplotlib.use("cairo.png")
import matplotlib.pyplot as plt

print matplotlib.pyplot.get_backend()

しかし、これは本当にそれを行う方法ですか?

更新 2: 昨日、深刻な脳のフリーズがありました... シンプルで最も明白な解決策は、すべてのチャートに Cairo バックエンドを使用し、バックエンドをまったく切り替えないことです :)

更新 3: 実際にはまだ問題なので、matplotlib バックエンドを動的に切り替える方法を知っている人は誰でも....回答を投稿してください。

4

9 に答える 9

39

「実験的」機能があります:

import matplotlib.pyplot as plt
plt.switch_backend('newbackend')

matplotlib docから取得。

デフォルトのバックエンドを newbackend に切り替えます。この機能は 実験的であり、イメージ バックエンドへの切り替えのみが機能することが期待されています。たとえば、インタラクティブな ipython セッションから実行したい多数の PostScript スクリプトがある場合、それらを実行する前に PS バックエンドに切り替えて、多数の GUI ウィンドウがポップアップしないようにすることができます。ある GUI バックエンドから別の GUI バックエンドにインタラクティブに切り替えようとすると、爆発します。このコマンドを呼び出すと、開いているすべてのウィンドウが閉じます。

于 2011-06-16T12:57:25.930 に答える
15

reload組み込み関数 ( importlib.reloadPython 3)を使用しないのはなぜですか?

import matplotlib
matplotlib.use('agg')

matplotlib = reload(matplotlib)
matplotlib.use('cairo.png')
于 2013-02-07T23:48:06.083 に答える
7

したがって、これがあなたが探しているものであるかどうかは完全にはわかりません。

matplotlib の特定の構成を含む matplotlibrc ファイルを使用して、バックエンドを変更できます。

スクリプトに次のものを入れることができます:

matplotlib.rcParams['backend'] = 'TkAgg' 

または、バックエンドを切り替えるためのそのようなもの。

于 2010-07-19T23:28:07.137 に答える
3

IPython コンソール (Spyder 内を含む) を使用している場合は、組み込みのマジック コマンドを使用してバックエンドをすばやく切り替えることができます。

%matplotlib qt

次のコマンドで使用できるバックエンドのリストを取得します。

%matplotlib --list

利用可能な matplotlib バックエンド: ['tk'、'gtk'、'gtk3'、'wx'、'qt4'、'qt5'、'qt'、'osx'、'nbagg'、'notebook'、'agg'、' svg', 'pdf', 'ps', 'inline', 'ipympl', 'widget']

于 2020-10-05T22:51:50.387 に答える
1

おそらく pickle またはjoblibの助けを借りて、別の Python プロセスでそのプロットを作成することもできます。

于 2011-06-07T19:24:41.080 に答える