我正在尝试绘制一个由三维球面组成的几何体。 有成千上万个这样的球体,每个球体都有给定的坐标、半径和颜色
我想使用3D轴(mpl_toolkits.mplot3d.Axes3D
)的散点,因为我没有找到一种更有效的方法在3D中进行散点。我也不能使用Mayavi
。
但是,我希望在比例上查看我的几何体,这意味着球应该具有xyz比例中提供的半径(米)
在做了一些研究之后,我需要提供给scatter
的大小似乎是pt^2中的曲面,其中1 pt=dpi/72像素
然后我需要创建一个新函数scatter2
,其中曲面(磁盘或球体,我不确定…)以米^2为单位,将其转换为像素^2,然后再转换为pt^2
有人知道如何完成此任务吗^2=>;像素^2
另外,如果您有更好(更简单和/或运行更快)的解决方案,我很乐意听到
最后,即使使用scatter
,当我尝试旋转几何体时,绘图速度也非常慢。这正常吗?我可以在代码中添加一些东西以加速图形处理吗
以下是我目前的代码:
from random import random
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def scatter2(fig,ax,x,y,z,c,s_meters2):
s_pixels2 = [s_meters2[i]*1 for i in range(len(s_meters2))] # meters^2 => pixels^2,how to do?
s_pt2 = [s_pixels2[i]*fig.dpi/72 for i in range(len(s_pixels2))] # pixels^2 => pt^2
ax.scatter3D(x,y,z,c=c,s=s_pt2)
if __name__ == "__main__":
n_spheres = 50000
x = [random()*100 for i in range(n_spheres)]
y = [random()*100 for i in range(n_spheres)]
z = [random()*100 for i in range(n_spheres)]
s = [random()*1 for i in range(n_spheres)]
c = [[random(),random(),random()] for i in range(n_spheres)]
fig = plt.figure()
ax = plt.subplot(111, projection='3d')
scatter2(fig,ax,x,y,z,c,s)
请告诉我,如果它的编程方式和语法是好的,我是一个初学者
谢谢大家!
目前没有回答
相关问题 更多 >
编程相关推荐