IPython リッチ出力 (HTML 形式) を出力として受け取る関数を Python コードで構築するにはどうすればよいですか?
P粉713846879
2023-08-31 21:59:28
<p></p> を実現するような <code>foo()</code> という関数を構築する方法
<pre class="brush:php;toolbar:false;">pycode = '''
matplotlibからpyplotをpltとしてインポートします
plt.plot([1, 2, 3])
plt.show()
「」
out = foo(pycode)</pre>
<p>ここで、<code>out</code> は、ipython または jupyter Notebook が出力するリッチ テキスト HTML 出力です</p>
<p>これを実現できる ipython の組み込み関数はありますか?あるはずなのですが、Googleで検索しても見つかりません。 </p>
<p>編集: この関数は、ipython シェルの実行時ではなく、Python スクリプト内に存在させたいと考えています。 </p>
<p> 編集: 私がやりたいのは、基本的に jupyter ノートブックのセルに似たものを再作成することであり、それにコードを与えると、jupyter ノートブックのセルと同じように、視覚的な方法で豊富な出力 (おそらく HTML) が返されます。フォーマット。 </p>
Python の
exec()
メソッドをお探しなのではないでしょうか?matplotlib がインストールされている JupyterLab では、セル内で次のコードを実行すると、その下に出力が表示されます。 リーリー
exec()
および関連する
eval()は一般的に推奨されないことに注意してください。これらを使用すると、実行したくないコードを他の人や自分自身が誤って実行してしまい、重大な問題が発生する可能性があります。正しい方法を使用している場合は、通常は使用する必要はありません。
ここを参照してください。 (WebAssembly ベースの Python を使用して実行することもできるようです。PyScript: アップロードされた Python スクリプトを実行できますか? を参照してください。)最初のコメントへの応答に基づいて更新:
exec(pycode)
このノートブックがたまたま最後の行にあるため、
outは何も収集しません。 RichOutput は、IPython のキャプチャ ツールを使用して収集できます。また、インポートによって実装されるため、Python に Jupyter エコシステムもインストールされていれば機能するはずです。つまり、ノートブックでデモを行っている間に、
return Captured.outputs[0]を使用する関数を作成すると、プロットの RichOutput が返されます。
では、基礎となる原則について詳しく説明します。 ここでは RichOutput を扱って画像を生成しているため、その中の参照も確認する必要があることに注意してください。これにはまだ触れていないことがたくさんあります。
を使用せずに単純な関数を作成します。
.pyこのノートブック例
では、プログラムでファイルを作成する方法を確認できます。通常、テキストを手動で保存することで、テキスト エディターでこのようなファイルを作成できます。たとえば、次の内容を plot_func.py:
として保存します。 リーリー
次に、インポートして実行します。この処理中に、画像ファイルも保存されます。ノートブックに、画像ファイルmy_plot_via_func.png
が表示されます。これは単なる簡易バージョンです。関数をインポートして実行するプロセスも、イメージ ファイルが表示されるまで、ターミナルまたはその他の場所から純粋な Python で動作します。プロット結果をグラフィックス オブジェクト (グラフ) として返す場合は、それらを表示する方法が必要です。これは Jupyter では機能しますが、純粋な Python では機能しません。
何をしたいのかまだ明確でないため、このセクションを追加しました。また、特別に編成された Pandas データフレームを使用して特殊なプロットを生成する、より高度なバージョンもあります。試してみるには、ここをクリックし、
バインダーを起動
して、セッションの最初に表示されるサンプル ノートブックに従ってください。おそらくこれは、ニーズをより適切に表現するのに役立つでしょう。特に、この描画スクリプト内の のようなハードコードされた のすべてが、呼び出し可能なコマンド ライン スクリプトまたは関数に一般化されるためです。必要なインフラストラクチャについては、以下のコメントで説明します。コマンド ライン スクリプトは純粋な Python で実行することもできます。ノートブックでは、より包括的なため、通常%run
を使用することがわかりますが、ノートブックでは、出力処理の向上を犠牲にして、ノートブック名前空間でスクリプトを実行する必要がない場合は、次のようになります。%run -i
で許可されているように、通常は!python
を%run
に置き換えることができます。matplotlib プロットを使用して特定のプロットを返すコードを生成する例については、ここを参照してください。
HTMLの生成
元の質問は HTML に関するものでした。最初のコメントに応えて、 このメインのサンプル ノートブックの下部に HTML を生成するセクションを追加しました。実際、 この投稿「iPython HTML への matplotlib グラフィックの埋め込み」 はおそらく元の質問のほとんどをカバーしています。