程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

循环更新pyplot 3d散点图,网格线重叠点

发布于2019-12-04 23:50     阅读(792)     评论(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指出了一种可能对您也有用的解决方法。

解决方法:

您需要函数返回_ofsets3dLine3DCollection对象的内部变量中设置数据点的新坐标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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)