Bre*_*ent 4 python matplotlib python-2.7
我正在使用matplotlib来显示不断更新的数据(每秒大约改变10次).我正在使用3D散点图,我希望将轴固定到特定范围,因为数据相对于绘图边缘的位置非常重要.
目前,每当我添加新数据时,轴将重置为按数据缩放,而不是我想要的大小(当我有hold = False时).如果我设置hold = True,轴将保持正确的大小,但新数据将叠加在旧数据上,这不是我想要的.
如果我每次获取新数据时重新调整轴,我都可以使用它,但这似乎是一种低效的方法,特别是因为我还需要再次执行所有其他格式化(添加标题,图例等)
有没有什么方法可以只指定一次图的属性,这将在我添加新数据时保持不变?
这是我的代码的大致轮廓,以帮助解释我的意思:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X_MAX = 50
Y_MAX = 50
Z_MAX = 50
fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d')
ax.set_title("My Title")
ax.set_xlim3d([0, X_MAX])
ax.set_ylim3d([0, Y_MAX])
ax.set_zlim3d([0, Z_MAX])
ax.set_autoscale_on(False)
# This is so the new data replaces the old data
# seems to be replacing the axis ranges as well, maybe a different method should be used?
ax.hold(False)
plt.ion()
plt.show()
a = 0
while a < 50:
a += 1
ax.scatter( a, a/2+1, 3, s=1 )
# If I don't set the title and axes ranges again here, they will be reset each time
# I want to know if there is a way to only set them once and have it persistent
ax.set_title("My Title")
ax.set_xlim3d([0, X_MAX])
ax.set_ylim3d([0, Y_MAX])
ax.set_zlim3d([0, Z_MAX])
plt.pause(0.001)
Run Code Online (Sandbox Code Playgroud)
编辑:1.我也尝试过ax.set_autoscale_on(False),但没有成功2.我用常规2D散点图尝试了这个,同样的问题仍然存在3.发现一个相关的问题,但仍然没有一个答案
我会做这样的事情(注意删除hold(False)):
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X_MAX = 50
Y_MAX = 50
Z_MAX = 50
fig = plt.figure(1)
ax = fig.add_subplot(111, projection='3d')
ax.set_title("My Title")
ax.set_xlim3d([0, X_MAX])
ax.set_ylim3d([0, Y_MAX])
ax.set_zlim3d([0, Z_MAX])
ax.set_autoscale_on(False)
plt.ion()
plt.show()
a = 0
sct = None
while a < 50:
a += 1
if sct is not None:
sct.remove()
sct = ax.scatter( a, a/2+1, 3, s=1 )
fig.canvas.draw()
plt.pause(0.001)
Run Code Online (Sandbox Code Playgroud)
每次通过循环时只删除添加的散点图.
| 归档时间: |
|
| 查看次数: |
4454 次 |
| 最近记录: |