ホームページ  >  に質問  >  本文

IPython リッチ出力 (HTML 形式) を出力として受け取る関数を Python コードで構築するにはどうすればよいですか?

<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>
P粉713846879P粉713846879415日前623

全員に返信(1)返信します

  • P粉486138196

    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()

    を使用せずに単純な関数を作成します。 このノートブック例 では、プログラムで

    .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 グラフィックの埋め込み」 はおそらく元の質問のほとんどをカバーしています。

    返事
    0
  • キャンセル返事