任意形状三维体积内的拉丁超立方采样适配及可视化优化问询
任意形状三维体积内的拉丁超立方采样适配及可视化优化问询
我有一组由XYZ坐标组成的数据集,可以渲染成3D柱状图,效果如下:

我现在最核心的问题是:怎么在这个任意形状的体积内生成用户指定数量(记为X)的采样点,同时保证这些点能尽可能好地代表整个体积的特征?
我已经尝试过两种方法,但都遇到了瓶颈:
- 一开始我想用拉丁超立方采样,但这方法从名字就能看出来,是针对立方体设计空间的,完全适配不了我这种任意形状的体积。
- 之后我又尝试了一种针对n维椭球生成随机点的方法,本来盼着能调整一下适配任意形状,但折腾了半天也没成功。
另外还有个小困扰:我对3D直方图的展示方式不太满意,更想呈现一个“规整”的体积。试过用griddata,但它默认需要立方体基底,也不符合我的需求。
编辑补充:
后来我成功把数据绘成了3D曲面,这个展示效果我觉得够用了,用到的代码如下:
import numpy as np import matplotlib.pyplot as plt data_2d = [ [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 0], [0, 0, 6, 8, 10, 12, 14, 16, 18, 20, 22], [0, 0, 0, 0, 0, 12, 14, 16, 18, 20, 22], [0, 0, 0, 0, 0, 12, 14, 16, 18, 20, 0], [0, 0, 0, 0, 0, 0, 14, 16, 18, 0, 0], [0, 0, 0, 0, 0, 0, 14, 16, 18, 0, 0], [0, 0, 0, 0, 0, 0, 14, 16, 18, 0, 0], [0, 0, 0, 0, 0, 0, 14, 16, 18, 0, 0], ] # data_2d: - rows are Hs from 1 to 8 (8 rows) # - columns are Tp from 2 to 22 (10 columns) # - content is the wind speed from 2 to 22 data_array = np.array(data_2d) x_data, y_data = np.meshgrid(np.linspace(2, 22, 11), np.linspace(1, 8, 8)) ax = plt.axes(projection="3d") ax.plot_surface(x_data, y_data, data_array, cmap="viridis", edgecolor="black") ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("z") plt.show()
对应的3D曲面效果如下:


备注:内容来源于stack exchange,提问作者Ryderc




