如何解决matplotlib set_data() 在下一次绘制时不更新绘图()
我在 3D 绘图的一面墙上放置了一个 2D 绘图,它似乎没有反映 set_data()
的任何变化,我想了解我在这里做错了什么。
这是一个示例代码,显示了带有相关 2D“投影”图的 3D 图。 The output is shown here:
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['legend.fontsize'] = 10
fig = plt.figure()
ax = fig.gca(projection='3d')
# Test data for projection onto xz plane
t = linspace(0,10,num=20)
z = np.sin(t)
# Plot projection
projx,= ax.plot(np.linspace(-1,num=len(z)),z,'r',zdir='y',zs=1)
# Labels and scaling
ax.set_xlabel('M_x')
ax.set_ylabel('M_y')
ax.set_zlabel('M_z')
ax.set_xlim(-1,1)
ax.set_ylim(-1,1)
ax.set_zlim(-1,1)
# Update projection data
projx.set_data([0],[0])
# See if actually updated data
print(projx.get_xdata())
# Draw and display window
plt.draw()
ax.legend()
plt.show()
我想象这一行:
projx.set_data([0],[0])
会使投影图几乎为空。相反,正弦波仍然存在。
此外,打印输出如预期的那样产生 [0]
,因此 set_data()
调用成功,但由于某种原因,绘图没有使用新数据绘制。
set_data() 的变化不应该在之后绘制时反映出来吗?
解决方法
有一种方法可以通过直接设置顶点来更新 Line3D
对象。不过,不确定这是否会产生任何负面影响。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
# Test data for projection onto xz plane
t = np.linspace(0,10,num=20)
z = np.sin(t)
# Plot projections
projx,= ax.plot(np.linspace(-1,num=len(z)),z,'r',zdir='y',zs=1,label="changed")
projy,'b',zdir='x',zs=-1,label="not changed")
# Labels and scaling
ax.set_xlabel('M_x')
ax.set_ylabel('M_y')
ax.set_zlabel('M_z')
ax.set_xlim(-1,1)
ax.set_ylim(-1,1)
ax.set_zlim(-1,1)
#update vertices of one Line3D object
projx._verts3d = [0,0.2,0.7],[1,1,1],[0.5,0.7]
ax.legend()
plt.show()
但是,由于不能省略 x
、y
和 z
数组中的任何一个,因此与将其绘制为一个数组为常量的 3D 数组相比,并没有真正的优势.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。