web-dev-qa-db-ja.com

Python Tools for Visual Studioを使用してVisual StudioでMatplotlibを使用してプロットする

PythonコードにPTVSを使用するのは初めてです。Anacondaディストリビューションに付属しているため、以前はSpyderを使用していました。ここに私が抱えている問題があります。

2つのプロットを作成し、それらを別々のウィンドウに同時に表示しようとしています。簡単な例です。

import matplotlib.pyplot as plt 
plt.plot([1,2,3,4,5]) 
plt.show() 
plt.plot([2,2,2,2,2]) 
plt.show()

しかし、最初のプロットを閉じない限り、2番目のプロットは表示されません。同様に、より大きなスクリプトの場合、プロットを閉じないと、plt.show()の後の残りのコードチャンクは実行されません。デバッグせずに実行してみましたが、動作しません。ただし、Ipython対話型ウィンドウで同じコードを実行すると、すべてのコードが実行され、両方のプロットをインラインとして表示できますが、それは私が望むものではありません。すべてのコードを実行して、残りのコードを実行するためにプロットを閉じるような中断をせずに、さまざまなウィンドウで必要な数のプロットを作成して実行したいと思います。私はまだSpyderでそれを行うことができますが、完全にVisual Studioに切り替えたいので、この問題が私を悩ませています。

任意の助けいただければ幸いです。前もって感謝します。

10
kdemirtas_

今私はこれがVSでどのように機能するのかわかりませんが、インタラクティブウィンドウで複数のプロットを(保存せずに)作成する必要があり、それらすべてを一緒に表示したい場合は、次のようにします:

_fig, ax = plt.subplots()
ax.plot([1,2,3,4,5])
fig1, ax1 = plt.subplots()
ax1.plot([1,2,3,4,5])
plt.show()
_

plt.show()の後に(まだ)動かなくなることに注意してください。残りのコードの邪魔にならないインタラクティブウィンドウを使用するには、IPythonまたは非同期のプロットと計算を可能にする他のツールを使用する必要があります。ただし、Pythonインタプリタから直接行うと、その行を終了するまで待機する必要があります。

さらに、plt.ion()beforeを実行することで、インタラクティブモードをオンにすることができます。これにより、プロットを直接表示できるようになり、それに関連するコマンドを発行した後に更新されます。

それがあなたが探している実際のコマンドだと思います。 これがマニュアルです

6
ljetibo

Visual Studioではこれを行っていませんが、Matplotlibを使用すると、showへの非ブロッキング呼び出しを使用できます。 drawメソッドはブロックしませんが、showを実行して呼び出しを終了しない場合、グラフウィンドウはすぐに閉じます。

import matplotlib.pyplot as plt
plt.figure(1)
plt.plot([1,2,3,4,5]) 
plt.show(block=False)

# Create a new figure to show the extra information.
# http://matplotlib.org/users/pyplot_tutorial.html#working-with-multiple-figures-and-axes
plt.figure(2)
plt.plot([2,2,2,2,2]) 
plt.show()

これは、同じトピックに関する 関連する質問 です。

個人的には matplotlib の例に示すようにsubplotsを使用します。

3
erik-e

あなたは自分のスクリプトで、またはPython Interactive window)でこの作業をしようとしていますか?

後者の場合は、ツール->オプション-> Pythonツール->対話型ウィンドウ->対話モード)でIPythonモードを有効にする必要があります(デフォルトは「標準」です。 「IPython」、および適切なPythonが[設定を表示]コンボボックスで選択されていることを確認してください。複数インストールされている場合)plt.showとして、plt.plotは、インタラクティブウィンドウ内に直接インラインでプロットを表示します。

1
Pavel Minaev

同様の理由で、私が取り組んでいるオープンソースツールを提案できます。ウィンドウや特定の環境を閉じずに、デバッグ中にプロットを次々と見たかったのですが...

この回答は、Matplotlibを直接使用するのに役立ちませんが、同じ問題を解決する別の方法を提案します。私がMatplotlibまたはIPythonおよび類似のツールで見つけた問題は、それらが通常特定の環境(あなたの場合、IDEなど)に非常に制限されていることです。また、これらのツールは通常、独自のディスプレイ要件に合わせて制御することが困難です(または多くの時間を必要とします)。

HypnoLog は、Pythonまたはその他の言語からのデータをプロットするのに役立ちます。プロットをWebブラウザの同じページに次々と表示します(ログ)。HypnoLogはブラウザーを使用してプロットを表示するので、Webで利用可能な他のツールを使用して簡単にプロットを表示したり、独自のプロットを作成したりできます。

特にPythonにはすでに言語ラッパーがあります。 HypnoLog-Python を参照してください。数値配列をプロットするには、組み込みの視覚化を使用できますplot

これはPythonでどのように見えるかです:

import hypnolog as HL
HL.log([1,2,3,4,5], 'plot');
0
Simon Ldj