作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在一个情节上绘制一个平面,而不会使主要情节超出比例或被覆盖。理想情况下,我想要的是在波函数的复杂可视化中帮助可视化势垒,这可以通过以某种方式在势区之间创建一个阴影体积来完成......我想我可以为此目的制作两个平面但他们策划了我的主要情节。这是我分别尝试的没有和有平面的结果图的两张图片:
我想我可能会覆盖主要情节,但我找不到这个问题的明确解决方案,这是我用来制作情节和动画的代码(如果需要,我可以分享整个代码):
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.get_proj = lambda: np.dot(Axes3D.get_proj(ax), np.diag([1.5, 0.7, 0.7, 1]))
line,=ax.plot(x,IMAG[0,:],REAL[0,:],"r",linewidth=0.5)
ax.set_xlabel('Posició (nm)')
ax.set_ylabel('$Im[\psi(x,t)]$')
ax.set_zlabel('$Re[\psi(x,t)]$')
#Here are the two planes
yy, zz = np.meshgrid(range(-2,2), range(-2,2))
ax2 = plt.subplot(projection='3d')
ax2.plot_surface(-l, yy, zz,color='b',alpha=0.2)
ax2.plot_surface(l, yy, zz,color='b',alpha=0.2)
def animacio(i):
ax.collections.clear()
line.set_data(REAL[i,:],IMAG[i,:])
line.set_3d_properties(x, 'x')
return line,
ani=animation.FuncAnimation(fig,animacio,interval=50, frames=Nt,repeat=True)
ani.save(f'Evolució_[{V0},{L},{l},{xi},{sigmax},{T}].mp4', writer="ffmpeg", dpi=300)
plt.show()
最佳答案
您正在单独的 subplot 上绘制平面从波函数。代替
ax2 = plt.subplot(projection='3d')
ax2.plot_surface(-l, yy, zz,color='b',alpha=0.2)
ax2.plot_surface(l, yy, zz,color='b',alpha=0.2)
ax.plot_surface(-l, yy, zz, color='b', alpha=0.2)
ax.plot_surface(l, yy, zz, color='b', alpha=0.2)
ax.collections.clear()
set_data
和
set_3d_properties
应该足以在不改变平面的情况下对波函数进行动画处理。
ax.set_xlim([-20, 20])
ax.set_ylim([-0.6, 0.6])
ax.set_zlim([-0.6, 0.6])
yy, zz = np.meshgrid(np.linspace(-1,1), np.linspace(-1,1))
set_data
时遇到问题和
set_3d_properties
在过去,如果这些不起作用,那么您必须简单地清除轴并重新绘制波函数和边界平面,同时重置每次迭代的限制。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
from mpl_toolkits.mplot3d import Axes3D
n = 200
fig = plt.figure(figsize=(16,6))
ax = fig.add_subplot(111, projection='3d')
yy, zz = np.meshgrid(np.linspace(-1,1), np.linspace(-1,1))
def update(i):
# Show propagation of demonstration wavefunction in +x direction
i *= 22
p = np.zeros((3, n*4))
p[0,:] = np.linspace(-np.pi*16, np.pi*16, n*4)
x = p[0,i:i+n*2]
p[1,i:i+n*2] = np.sin(2*x + np.pi/2) * np.sin(x/16 + np.pi/2)/2
p[2,i:i+n*2] = np.sin(2*x) * np.cos(x/16)/2
# Plotting
plt.cla()
ax.set_xlim([-np.pi*16, np.pi*16])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.plot_surface(np.full_like(yy, -np.pi*16), yy, zz, color='b', alpha=0.2)
ax.plot_surface(np.full_like(yy, np.pi*16), yy, zz, color='b', alpha=0.2)
plot, = ax.plot(p[0,:], p[1,:], p[2,:], color='red', lw=1)
return plot,
anim = animation.FuncAnimation(fig, update, frames=n//10, interval=2000/(n//10))
anim.save('wavefunc.gif', writer='imagemagick')
关于python - 如何在不影响主情节比例的情况下绘制平面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59602648/
我是一名优秀的程序员,十分优秀!