Python bloch球面上的实时绘图
我试图使用Qutip的函数bloch()在bloch球体上绘制实时数据 到目前为止,当我有一个b.show()时,代码总是中断 我在网上找到了很多类似问题的解决方案,但大多数都使用了直接的matplotlib命令,比如matplotlib.draw(),它似乎不适用于bloch类。 然后,还有其他解决方案,例如使用Tk或GTKagg(例如,或) 有人能帮我解决布洛赫班上的同样问题吗 编辑: 下面是一个简单的例子: 基本上,我想一次更新一个点,最好是在循环中。我的目标是在绘图中显示必须从文件读取的实时数据Python bloch球面上的实时绘图,python,matplotlib,plot,qutip,Python,Matplotlib,Plot,Qutip,我试图使用Qutip的函数bloch()在bloch球体上绘制实时数据 到目前为止,当我有一个b.show()时,代码总是中断 我在网上找到了很多类似问题的解决方案,但大多数都使用了直接的matplotlib命令,比如matplotlib.draw(),它似乎不适用于bloch类。 然后,还有其他解决方案,例如使用Tk或GTKagg(例如,或) 有人能帮我解决布洛赫班上的同样问题吗 编辑: 下面是一个简单的例子: 基本上,我想一次更新一个点,最好是在循环中。我的目标是在绘图中显示必须从文件读取的
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()
我认为你是在破坏你的阴谋,因为你在为每一点呼吁秀。尝试在循环外调用show(最后) 编辑:动画打印 将
show
视为调用绘图进入视图的绝对命令。它不是绘制命令(或重画)。如果确实希望每隔“n”秒左右显示一幅图像,则需要在再次调用绘图之前清除绘图。你可以试试这个:
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我最好的建议不过,您可以使用文档中的动画公式。按照这个食谱:
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)
,您应该能够修改animate函数以执行所有需要的操作。在此添加代码的最小示例(如果可能,可以通过复制粘贴进行测试)。好的。我希望这能让你更容易理解这个问题。嗨@armatita,谢谢你的回答。我的问题是我想显示我想在绘图中看到的实时数据。因此,我不能将所有内容都放入一个数组中,同时显示所有内容。因此,将有一个文件每0.2秒更新一次,我想将最后一行读入python,并将其绘制到图形中,以实时查看度量是如何演变的。这就是为什么我希望能够从循环内部绘图。@Mechanix我已经更新了我的帖子。我的答案取决于这样一个事实:我认为QuTip的工作原理可能与matplotlib非常相似。如果它不起作用,我建议你只使用网站上给出的动画配方。文章中的链接。再次感谢。问题是我如何在屏幕上显示动画。。。有什么想法吗?@Mechanix该配方基于matplotlib,它可以在屏幕上显示实时动画。你只需要根据你的案例研究来调整它。在此链接中,您将看到另一个使用实时随机生成数据的类似动画。注意同一个调用是如何使用的:好吧,很有趣,我实际上在看同一个示例。问题是,他们使用plt.draw(),它支持这种实时更新。在我的例子中,我只得到消息“AttributeError:Bloch实例没有属性'draw'”
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)