比例散点修改

我正在尝试绘制3D球面组成的几何图形。 这些球有数以万计,每个球都有给定的坐标,半径和颜色。

我想在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,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,s)

请告诉我它的编程方式和语法是否正确,我是初学者。

谢谢!

dengym123 回答:比例散点修改

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3148735.html

大家都在问