[解決済み] pyplotのウィンドウを閉じる
質問
最終編集です。
pyplotのウィンドウを閉じるというテーマで私が見つけたのは、おそらくpyplotを使用してはいけないということです。 SRKは、以下の彼の回答で更新されるプロットを処理する方法についての素晴らしい例を示しています。 また、私はTkinterウィンドウにpyplotのプロットを置く方法を偶然見つけました。Tkinterはpyplotよりもウィンドウのオープンとクローズに長けています。 これは は、Tkウィンドウにpyplotプロットを配置する方法です。 また これは良い例です .
/最終編集
複数のプロットを表示し、何らかのコード入力で個別に閉じる(画面から消す)ことができるようにしたいのですが、そのためのコード入力がわかりません。
以下は、これまで私が試したことです。 show と close コマンドの位置を弄りましたが、これによって得られた唯一の本当の結果は、どちらかのプロットが表示されないというもので、画面からプロットを削除することはできませんでした。 私は間を作るためにraw_input()を挿入しています。
編集:これらのプロットはTkinterのguiから呼び出されています。もしその方向からこれを行う良い方法があれば、それを教えていただけると幸いです。
どんな意見でも結構です、ありがとうございます。
import matplotlib.pyplot as plt
a = range(0,10)
b = range(0,20,2)
c = range(0,30,3)
d = range(0,40,4)
plot1 = plt.figure()
plt.plot(a,b, 'r-o')
plt.show()
plt.close()
plot2 = plt.figure()
plt.plot(c,d, 'b-o')
plt.show()
plt.close()
コードを編集します。 これもうまくいきませんでした。
plot1 = plt.figure(1)
plt.plot(a,b, 'r-o')
plot2 = plt.figure(2)
plt.plot(c,d, 'b-o')
#plt.close(1)
#this will prevent plot1 from being displayed
plt.show()
plt.close(1) # or ('all') or (plot1)
解決方法は?
plt.close()
は現在のインスタンスを閉じます。
plt.close(2)
は図2を閉じます
plt.close(plot1)
は、インスタンス plot1 を持つ図を閉じます。
plt.close('all')
はすべてのフィーチャーを閉じます
発見 ここで .
次のことを忘れないでください。
plt.show()
は
ブロッキング
関数を使うので、上で使った例のコードでは
plt.close()
はウィンドウを閉じるまで実行されないので、冗長になっています。
を使用することができます。
plt.ion()
をコードの先頭に置くと、ノンブロッキングになります。ただし、これには別の意味があります。
例
コメントでの議論の後、plot機能がどのように使用されるかを示すために、ちょっとした例をまとめました。
以下、プロットを作成します。
fig = plt.figure(figsize=plt.figaspect(0.75))
ax = fig.add_subplot(1, 1, 1)
....
par_plot, = plot(x_data,y_data, lw=2, color='red')
この場合
ax
は、軸のペアへのハンドルです。これらの軸に対して何かをしたいときはいつでも、現在の軸のセットをこの特定のセットに変更するために
axes(ax)
.
par_plot
はline2Dインスタンスへのハンドルです。これをアーティストと呼びます。ydataを変更するなど、線のプロパティを変更したい場合は、このハンドルを参照することで行える。
また、次のようにすれば、スライダーウィジェットを作ることができますね。
axsliderA = axes([0.12, 0.85, 0.16, 0.075])
sA = Slider(axsliderA, 'A', -1, 1.0, valinit=0.5)
sA.on_changed(update)
最初の行は、スライダー用の新しい軸を作成します (
axsliderA
) を作成し、2 行目はスライダーのインスタンスを作成します。
sA
を軸に配置し、3行目ではスライダーの値が変化したときに呼び出す関数を指定しています (
update
).
私のアップデート機能は次のようなものです。
def update(val):
A = sA.val
B = sB.val
C = sC.val
y_data = A*x_data*x_data + B*x_data + C
par_plot.set_ydata(y_data)
draw()
は
par_plot.set_ydata(y_data)
は ydata を変更します。
プロパティ
の
ライン2D
オブジェクトをハンドル
par_plot
.
は
draw()
関数は
現在の
軸のセット。
全部をまとめる
from pylab import *
import matplotlib.pyplot as plt
import numpy
def update(val):
A = sA.val
B = sB.val
C = sC.val
y_data = A*x_data*x_data + B*x_data + C
par_plot.set_ydata(y_data)
draw()
x_data = numpy.arange(-100,100,0.1);
fig = plt.figure(figsize=plt.figaspect(0.75))
ax = fig.add_subplot(1, 1, 1)
subplots_adjust(top=0.8)
ax.set_xlim(-100, 100);
ax.set_ylim(-100, 100);
ax.set_xlabel('X')
ax.set_ylabel('Y')
axsliderA = axes([0.12, 0.85, 0.16, 0.075])
sA = Slider(axsliderA, 'A', -1, 1.0, valinit=0.5)
sA.on_changed(update)
axsliderB = axes([0.43, 0.85, 0.16, 0.075])
sB = Slider(axsliderB, 'B', -30, 30.0, valinit=2)
sB.on_changed(update)
axsliderC = axes([0.74, 0.85, 0.16, 0.075])
sC = Slider(axsliderC, 'C', -30, 30.0, valinit=1)
sC.on_changed(update)
axes(ax)
A = 1;
B = 2;
C = 1;
y_data = A*x_data*x_data + B*x_data + C;
par_plot, = plot(x_data,y_data, lw=2, color='red')
show()
上記についての注意点です。アプリケーションを実行すると、コードは順次実行されます。
update
関数がメモリにあると思います)、show()にぶつかるまではブロックされています。スライダーの1つに変更を加えると、メモリからupdate関数が実行されます(と思うのですが?)
このようにshow()が実装されているのは、関数を使ってデータを処理することで、バックグラウンドで値を変更できるようにするためです。
関連
-
PythonによるLeNetネットワークモデルの学習と予測
-
ピロウズ画像色処理の具体的な活用方法
-
Pythonによるjieba分割ライブラリ
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] PyPlot で Y 軸を反転させる
-
[解決済み】pyplot 散布図 マーカーの大きさ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Python 入出力と高次代入の基礎知識
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない