使用matplotlib使3D形状适合分散的数据吗?

时间:2019-07-05 01:25:25

标签: python numpy matplotlib

我有一个X,Y,Z文件,当将其绘制为3D散点图时,它会创建以下内容:

enter image description here

我想通过连接这两个“圆形分布”的外点来创建3D形状,或者只是以某种方式拟合3D形状(例如圆柱体),以便以后可以计算出该形状的体积3D形状。有什么想法吗?

数据:

0.200 0.080 3.311
0.200 0.080 3.325
0.200 0.080 3.340
0.200 0.080 3.354
0.200 0.080 3.369
0.200 0.080 3.384
0.200 0.080 3.398
0.200 0.080 3.413
0.200 0.080 3.428
0.200 0.085 3.281
0.200 0.085 3.296
0.200 0.085 3.311
0.200 0.085 3.325
0.200 0.085 3.340
0.200 0.085 3.354
0.200 0.085 3.369
0.200 0.085 3.384
0.200 0.085 3.398
0.200 0.085 3.413
0.200 0.085 3.428
0.200 0.085 3.442
0.200 0.085 3.457
0.200 0.090 3.267
0.200 0.090 3.281
0.200 0.090 3.296
0.200 0.090 3.311
0.200 0.090 3.325
0.200 0.090 3.340
0.200 0.090 3.354
0.200 0.090 3.369
0.200 0.090 3.384
0.200 0.090 3.398
0.200 0.090 3.413
0.200 0.090 3.428
0.200 0.090 3.442
0.200 0.090 3.457
0.200 0.090 3.472
0.200 0.090 3.486
0.200 0.095 3.281
0.200 0.095 3.296
0.200 0.095 3.311
0.200 0.095 3.325
0.200 0.095 3.340
0.200 0.095 3.354
0.200 0.095 3.369
0.200 0.095 3.384
0.200 0.095 3.398
0.200 0.095 3.413
0.200 0.095 3.428
0.200 0.095 3.442
0.200 0.095 3.457
0.200 0.095 3.472
0.200 0.095 3.486
0.200 0.095 3.501
0.200 0.095 3.516
0.200 0.100 3.281
0.200 0.100 3.296
0.200 0.100 3.311
0.200 0.100 3.325
0.200 0.100 3.340
0.200 0.100 3.354
0.200 0.100 3.369
0.200 0.100 3.384
0.200 0.100 3.398
0.200 0.100 3.413
0.200 0.100 3.428
0.200 0.100 3.442
0.200 0.100 3.457
0.200 0.100 3.472
0.200 0.100 3.486
0.200 0.100 3.501
0.200 0.100 3.516
0.200 0.100 3.530
0.200 0.105 3.311
0.200 0.105 3.325
0.200 0.105 3.340
0.200 0.105 3.354
0.200 0.105 3.369
0.200 0.105 3.384
0.200 0.105 3.398
0.200 0.105 3.413
0.200 0.105 3.428
0.200 0.105 3.442
0.200 0.105 3.457
0.200 0.105 3.472
0.200 0.105 3.486
0.200 0.105 3.501
0.200 0.105 3.516
0.200 0.105 3.530
0.200 0.110 3.325
0.200 0.110 3.340
0.200 0.110 3.354
0.200 0.110 3.369
0.200 0.110 3.384
0.200 0.110 3.398
0.200 0.110 3.413
0.200 0.110 3.428
0.200 0.110 3.442
0.200 0.110 3.457
0.200 0.110 3.472
0.200 0.110 3.486
0.200 0.110 3.501
0.200 0.110 3.516
0.200 0.115 3.369
0.200 0.115 3.384
0.200 0.115 3.398
0.200 0.115 3.413
0.200 0.115 3.428
0.200 0.115 3.442
0.200 0.115 3.457
0.200 0.115 3.472
0.200 0.115 3.486
0.200 0.120 3.428
0.200 0.120 3.442
0.200 0.120 3.457
0.200 0.120 3.472
0.200 0.120 3.486
0.350 0.080 3.428
0.350 0.085 3.296
0.350 0.085 3.311
0.350 0.085 3.325
0.350 0.085 3.340
0.350 0.085 3.354
0.350 0.085 3.369
0.350 0.085 3.384
0.350 0.085 3.398
0.350 0.085 3.413
0.350 0.085 3.428
0.350 0.085 3.442
0.350 0.085 3.457
0.350 0.085 3.472
0.350 0.085 3.486
0.350 0.085 3.501
0.350 0.090 3.267
0.350 0.090 3.281
0.350 0.090 3.296
0.350 0.090 3.311
0.350 0.090 3.325
0.350 0.090 3.340
0.350 0.090 3.354
0.350 0.090 3.369
0.350 0.090 3.384
0.350 0.090 3.398
0.350 0.090 3.413
0.350 0.090 3.428
0.350 0.090 3.442
0.350 0.090 3.457
0.350 0.090 3.472
0.350 0.090 3.486
0.350 0.090 3.501
0.350 0.090 3.516
0.350 0.090 3.530
0.350 0.095 3.267
0.350 0.095 3.281
0.350 0.095 3.296
0.350 0.095 3.311
0.350 0.095 3.325
0.350 0.095 3.340
0.350 0.095 3.354
0.350 0.095 3.369
0.350 0.095 3.384
0.350 0.095 3.398
0.350 0.095 3.413
0.350 0.095 3.428
0.350 0.095 3.442
0.350 0.095 3.457
0.350 0.095 3.472
0.350 0.095 3.486
0.350 0.095 3.501
0.350 0.095 3.516
0.350 0.095 3.530
0.350 0.095 3.545
0.350 0.095 3.560
0.350 0.100 3.267
0.350 0.100 3.281
0.350 0.100 3.296
0.350 0.100 3.311
0.350 0.100 3.325
0.350 0.100 3.340
0.350 0.100 3.354
0.350 0.100 3.369
0.350 0.100 3.384
0.350 0.100 3.398
0.350 0.100 3.413
0.350 0.100 3.428
0.350 0.100 3.442
0.350 0.100 3.457
0.350 0.100 3.472
0.350 0.100 3.486
0.350 0.100 3.501
0.350 0.100 3.516
0.350 0.100 3.530
0.350 0.100 3.545
0.350 0.100 3.560
0.350 0.100 3.574
0.350 0.100 3.589
0.350 0.105 3.267
0.350 0.105 3.281
0.350 0.105 3.296
0.350 0.105 3.311
0.350 0.105 3.325
0.350 0.105 3.340
0.350 0.105 3.354
0.350 0.105 3.369
0.350 0.105 3.384
0.350 0.105 3.398
0.350 0.105 3.413
0.350 0.105 3.428
0.350 0.105 3.442
0.350 0.105 3.457
0.350 0.105 3.472
0.350 0.105 3.486
0.350 0.105 3.501
0.350 0.105 3.516
0.350 0.105 3.530
0.350 0.105 3.545
0.350 0.105 3.560
0.350 0.105 3.574
0.350 0.105 3.589
0.350 0.110 3.237
0.350 0.110 3.252
0.350 0.110 3.267
0.350 0.110 3.281
0.350 0.110 3.296
0.350 0.110 3.311
0.350 0.110 3.325
0.350 0.110 3.340
0.350 0.110 3.354
0.350 0.110 3.369
0.350 0.110 3.384
0.350 0.110 3.398
0.350 0.110 3.413
0.350 0.110 3.428
0.350 0.110 3.442
0.350 0.110 3.457
0.350 0.110 3.472
0.350 0.110 3.486
0.350 0.110 3.501
0.350 0.110 3.516
0.350 0.110 3.530
0.350 0.110 3.545
0.350 0.110 3.560
0.350 0.110 3.574
0.350 0.110 3.589
0.350 0.115 3.237
0.350 0.115 3.252
0.350 0.115 3.267
0.350 0.115 3.281
0.350 0.115 3.296
0.350 0.115 3.311
0.350 0.115 3.325
0.350 0.115 3.340
0.350 0.115 3.354
0.350 0.115 3.369
0.350 0.115 3.384
0.350 0.115 3.398
0.350 0.115 3.413
0.350 0.115 3.428
0.350 0.115 3.442
0.350 0.115 3.457
0.350 0.115 3.472
0.350 0.115 3.486
0.350 0.115 3.501
0.350 0.115 3.516
0.350 0.115 3.530
0.350 0.115 3.545
0.350 0.115 3.560
0.350 0.115 3.574
0.350 0.115 3.589
0.350 0.120 3.267
0.350 0.120 3.281
0.350 0.120 3.296
0.350 0.120 3.311
0.350 0.120 3.325
0.350 0.120 3.340
0.350 0.120 3.354
0.350 0.120 3.369
0.350 0.120 3.384
0.350 0.120 3.398
0.350 0.120 3.413
0.350 0.120 3.428
0.350 0.120 3.442
0.350 0.120 3.457
0.350 0.120 3.472
0.350 0.120 3.486
0.350 0.120 3.501
0.350 0.120 3.516
0.350 0.120 3.530
0.350 0.120 3.545
0.350 0.120 3.560
0.350 0.120 3.574
0.350 0.120 3.589
0.350 0.125 3.311
0.350 0.125 3.325
0.350 0.125 3.340
0.350 0.125 3.354
0.350 0.125 3.369
0.350 0.125 3.384
0.350 0.125 3.398
0.350 0.125 3.413
0.350 0.125 3.428
0.350 0.125 3.442
0.350 0.125 3.457
0.350 0.125 3.472
0.350 0.125 3.486
0.350 0.125 3.501
0.350 0.125 3.516
0.350 0.125 3.530
0.350 0.125 3.545
0.350 0.125 3.560
0.350 0.125 3.574
0.350 0.130 3.369
0.350 0.130 3.384
0.350 0.130 3.398
0.350 0.130 3.413
0.350 0.130 3.428
0.350 0.130 3.442
0.350 0.130 3.457
0.350 0.130 3.472
0.350 0.130 3.486
0.350 0.130 3.501
0.350 0.130 3.516
0.350 0.130 3.530
0.350 0.130 3.545
0.350 0.130 3.560

2 个答案:

答案 0 :(得分:2)

您可以使用scipy.spatial.ConvexHull获取外点并计算体积:

from scipy import spatial
ch = spatial.ConvexHull(points)
print(ch.volume)

# to plot the surface
import pylab as pl
from mpl_toolkits.mplot3d import Axes3D
fig = pl.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.plot_trisurf(points[:, 0], points[:, 1], points[:, 2], triangles=ch.simplices)

答案 1 :(得分:1)

必须指出的是,连接包裹对象的外部点和装配圆柱体(或任何其他基本形状)是两种不同的事情。要包装外部点(这称为3D凸包问题),请使用pyhull Python库,它是Qhull library的接口。 Qhull可以找到最小的包裹对象并有效地计算其体积。

另一方面,基本的3D形状拟合是完全不同的主题。您可以参考this SO question了解更多信息。一旦获得圆柱体,就可以通过简单的代数执行体积计算。