P粉4861381962023-09-01 16:15:29
Python の exec()
メソッドをお探しなのではないでしょうか?
matplotlib がインストールされている JupyterLab では、セル内で次のコードを実行すると、その下に出力が表示されます。 リーリー
exec() および関連する
eval() は一般的に推奨されないことに注意してください。これらを使用すると、実行したくないコードを他の人や自分自身が誤って実行してしまい、重大な問題が発生する可能性があります。正しい方法を使用している場合は、通常は使用する必要はありません。
ここを参照してください。 (WebAssembly ベースの Python を使用して実行することもできるようです。PyScript: アップロードされた Python スクリプトを実行できますか? を参照してください。)
このように書くと、コードはグラフィックスを描画できますが、
exec(pycode) がたまたま最後の行にあるため、
out は何も収集しません。 RichOutput は、IPython のキャプチャ ツールを使用して収集できます。また、インポートによって実装されるため、Python に Jupyter エコシステムもインストールされていれば機能するはずです。つまり、ノートブックでデモを行っている間に、
return Captured.outputs[0] を使用する関数を作成すると、プロットの RichOutput が返されます。
では、基礎となる原則について詳しく説明します。 ここでは RichOutput を扱って画像を生成しているため、その中の参照も確認する必要があることに注意してください。これにはまだ触れていないことがたくさんあります。
exec()
このノートブック例
では、プログラムで ファイルを作成する方法を確認できます。通常、テキストを手動で保存することで、テキスト エディターでこのようなファイルを作成できます。たとえば、次の内容を plot_func.py: として保存します。
リーリー
次に、インポートして実行します。この処理中に、画像ファイルも保存されます。ノートブックに、画像ファイル my_plot_via_func.png
が表示されます。
これは単なる簡易バージョンです。関数をインポートして実行するプロセスも、イメージ ファイルが表示されるまで、ターミナルまたはその他の場所から純粋な Python で動作します。プロット結果をグラフィックス オブジェクト (グラフ) として返す場合は、それらを表示する方法が必要です。これは Jupyter では機能しますが、純粋な Python では機能しません。 何をしたいのかまだ明確でないため、このセクションを追加しました。また、特別に編成された Pandas データフレームを使用して特殊なプロットを生成する、より高度なバージョンもあります。試してみるには、ここをクリックし、 matplotlib プロットを使用して特定のプロットを返すコードを生成する例については、ここを参照してください。 元の質問は HTML に関するものでした。最初のコメントに応えて、 このメインのサンプル ノートブックの下部に HTML を生成するセクションを追加しました。実際、 この投稿「iPython HTML への matplotlib グラフィックの埋め込み」 はおそらく元の質問のほとんどをカバーしています。 バインダーを起動
して、セッションの最初に表示されるサンプル ノートブックに従ってください。おそらくこれは、ニーズをより適切に表現するのに役立つでしょう。特に、この描画スクリプト内の のようなハードコードされた のすべてが、呼び出し可能なコマンド ライン スクリプトまたは関数に一般化されるためです。必要なインフラストラクチャについては、以下のコメントで説明します。コマンド ライン スクリプトは純粋な Python で実行することもできます。ノートブックでは、より包括的なため、通常 %run
を使用することがわかりますが、ノートブックでは、出力処理の向上を犠牲にして、ノートブック名前空間でスクリプトを実行する必要がない場合は、次のようになります。 %run -i
で許可されているように、通常は !python
を %run
に置き換えることができます。
HTMLの生成