发布于2019-12-04 23:50 阅读(817) 评论(0) 点赞(27) 收藏(1)
我正在循环的每次迭代中更新3d散点图。重绘绘图时,网格线会“遍历”或“覆盖”这些点,这使我的数据更难以可视化。如果我构建一个3d图(无循环更新),则不会发生。下面的代码演示了最简单的情况:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import time
X = np.random.rand(100, 3)*10
Y = np.random.rand(100, 3)*5
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:, 0], X[:, 1], X[:, 2])
plt.draw()
for i in range(0, 20):
time.sleep(3) #make changes more apparent/easy to see
Y = np.random.rand(100, 3)*5
ax.cla()
ax.scatter(Y[:, 0], Y[:, 1], Y[:, 2])
plt.draw()
还有其他人遇到过这个问题吗?
在问题出在or 调用的意义上,MaxNoe看起来是正确的。实际上,这似乎是一个已知问题。ax.cla()
plt.cla()
然后出现一个问题,因为透明轴方法在3D绘图中不起作用,并且对于3D散点,没有干净的方法可以更改数据点的坐标(a la sc.set_data(new_values)
),如本邮件列表中所述(我没有找不到最近的东西)。
但是,在邮件列表中,Ben Roon指出了一种可能对您也有用的解决方法。
您需要在函数返回_ofsets3d
的Line3DCollection
对象的内部变量中设置数据点的新坐标scatter
。
您改编的示例如下所示:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import time
X = np.random.rand(100, 3)*10
Y = np.random.rand(100, 3)*5
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
sc = ax.scatter(X[:, 0], X[:, 1], X[:, 2])
fig.show()
for i in range(0, 20):
plt.pause(1)
Y = np.random.rand(100, 3)*5
sc._offsets3d = (Y[:,0], Y[:,1], Y[:,2])
plt.draw()
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/168254/b94b5df53d715efcda47/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!