2016-03-23 10 views
1

Qutipの関数bloch()を使用して、球面上のライブデータをプロットしようとしています。bloch球でのライブプロット

これまでのところ、b.show()があると、コードは常に割り込みを受けます。

私は同様の問題に対してオンラインで多くのソリューションを見つけましたが、それらのほとんどはmatplotlib.draw()のような直接matplotlibコマンドを使用していますが、これはblochクラスでは動作しません。 その後、例のTkまたはGTKagg(例えばhttps://stackoverflow.com/a/15742183/3276735またはreal-time plotting in while loop with matplotlib)のための利用する他のソリューション

がある誰かはブロッホクラスで同じ問題をどのように扱うか私を助けてくださいことはできますか?

編集:ここでは は、最小限の例です:基本的に

、私は、好ましくはループ内で、一度に一つのポイントと私のプロットを更新したいです。私の目標は、ファイルから読み込まなければならないライブデータをプロット内に表示することです。

import qutip as qt 
import numpy as np 


b = qt.Bloch() 

theta = np.arange(0,np.pi,0.1) 

for ii in range(len(theta)): 
    b.add_points([np.sin(theta[ii]),0,np.cos(theta[ii])]) 
    b.show() 
+0

ここにコードの最小限の例を追加します(可能であれば、コピー貼り付けでテストできます)。 – armatita

+0

申し訳ありません。私はその質問に関連づけるのがより簡単になることを願っています。 – Mechanix

答えて

1

私はあなたがすべてのポイントのためにショーを呼び出しているので、あなたがあなたのプロットを壊していると思います。ループの外側でshowを呼び出してみてください(最後に)。

import qutip as qt 
import numpy as np 


b = qt.Bloch() 

theta = np.arange(0,np.pi,0.1) 

for ii in range(len(theta)): 
    b.add_points([np.sin(theta[ii]),0,np.cos(theta[ii])]) 

b.show() # Changed here 

EDIT:アニメーションプロット

ビューにプロットを呼び出すために絶対的なコマンドとしてshowを考えてみましょう。描画コマンド(または再描画)ではありません。 「n」秒ごとに画像を表示したい場合は、再度呼び出す前にプロットをclearする必要があります。あなたはこれを試すことがあります。私は実際にそれをテストすることはできませんので

import qutip as qt 
import numpy as np 

b = qt.Bloch() 

theta = np.arange(0,np.pi,0.1) 

for ii in range(len(theta)): 
    b.clear() 
    b.add_points([np.sin(theta[ii]),0,np.cos(theta[ii])]) 
    b.show() 
    # wait time step and load new value from file. 

、私は私の現在の分布にQuTipを持っていないが、私はその重くmatplotlibのに基づいて、賭けています。 私の最高のアドバイスしかし、QuTiP文書のアニメーションのための定式化を使用することです。このレシピに従うことによって:

from pylab import * 
import matplotlib.animation as animation 
from mpl_toolkits.mplot3d import Axes3D 

fig = figure() 
ax = Axes3D(fig,azim=-40,elev=30) 
sphere=Bloch(axes=ax) 

def animate(i): 
    sphere.clear() 
    sphere.add_vectors([sin(theta),0,cos(theta)]) 
    sphere.add_points([sx[:i+1],sy[:i+1],sz[:i+1]]) 
    sphere.make_sphere() 
    return ax 

def init(): 
    sphere.vector_color = ['r'] 
    return ax 

ani = animation.FuncAnimation(fig, animate, np.arange(len(sx)), 
          init_func=init, blit=True, repeat=False) 
ani.save('bloch_sphere.mp4', fps=20, clear_temp=True) 

を、あなたが必要とするすべての操作を実行するためにアニメーション機能を変更することができるはずです。

+0

こんにちは@armatita、返信いただきありがとうございます。私の問題は、プロットで見たいライブデータを表示することです。したがって、すべてを配列に入れてすべてを一度に表示することはできません。 したがって、0.2秒ごとに更新されるファイルがあります。最後の行をPythonに読み込んで、グラフにプロットして、測定がどのように進化するかを確認します。だから私はループの内側からプロットできるようにしたいのです。 – Mechanix

+0

@Mechanix私は自分の投稿を更新しました。私の答えは、QuTipがmatplotlibとよく似ていると思うという事実に依存しています。それが動作しない場合は、サイトで与えられたアニメーションレシピを使用することをお勧めします。投稿のリンク。 – armatita

+0

もう一度ありがとうございます。問題は、どのように私は画面上にアニメーションのものを表示することができます...それについての任意のアイデア? – Mechanix