绘制 3D 密度图,并在数据点之间插入颜色以获得大量数据

问题描述 投票:0回答:1

我有一些数据要以 x,y,z,c 的形式绘制(~100k 行),其中 x,y,z 是坐标,c 是颜色。坐标范围在 [-0.5,0.5] 之间,颜色范围在 [-n,n] 之间,其中 n 正在变化,但通常是一个很小的数字(例如 0.0001)。我想将我的数据点着色为红色(如果为负)和蓝色(如果为正),并且它的黑暗范围应该从非常暗(距离零最远)到白色(在中心)...将其想象为电荷分布,其中中心是中性的.

我的 Gnuplot 脚本用于以 3D 方式绘制它并对其进行着色,效果如下:

set palette defined  ( -0.01 "dark-red", 0 "white", 0.01 "dark-blue" ) 
sp "filename" u 1:2:3:4 w p pt 7 ps 1 palette not

代码生成了一个很好的密度图,并且由于我的数据的颜色以零为中心,因此这些点也被正确着色。

我想要一个彩色插值密度图,而不是点,其中颜色(〜连续..)在点之间变化。因此,我希望看到从中心开始变化的暗度/强度的颜色斑点,而不是由较亮的点和白点包围的黑点(按预期几乎看不见)。

我还无法真正找到解决方案。 (我接受任何免费提供的软件解决方案,例如 gnuplot,但我也有 Mathematica)

3d gnuplot interpolation wolfram-mathematica
1个回答
0
投票

不确定这是否能完全回答您的问题。我想你需要使用体素功能。该示例是从 gnuplot 主页上的 example 或本地 gnuplot/demo 目录中的

voxel.dem
gen-random.inc
stat.inc
文件中总结出来的。我希望您能以某种方式将它用于您的案例。

脚本:(需要 gnuplot>=5.4.0)

### plot density of points
reset session

t0 = time(0.0)
print("Please wait...")
# create some random test data
set table $Data
    set samples 100000
    plot '+' u (invnorm(rand(0))):(invnorm(rand(0))):(invnorm(rand(0))):(rand(0)*0.005-0.001) w table
unset table
t1 = time(0.0)
print sprintf("Generating data  %.3f sec",t1-t0)

set xyplane relative 0
set view equal xyz
set palette defined  ( -0.01 "dark-red", 0 "white", 0.01 "dark-blue" ) 
set key noautotitle
set style fill transparent solid 0.5
set xrange[-5:5]
set yrange[-5:5]
set zrange[-5:5]

# define 100 x 100 x 100 voxel grid
set vgrid $vdensity size 100
vclear $vdensity

# fill a spherical region around each point in $Data
vfill $Data using 1:2:3:(0.33):(1.0)

splot '++' using 1:(0):2:(voxel($1,0,$2)) with pm3d, \
      '++' using 1:2:(0):(voxel($1,$2,0)) with pm3d, \
      '++' using (0):1:2:(voxel(0,$1,$2)) with pm3d
t2 = time(0.0)
print sprintf("Plotting data    %.3f sec",t2-t1)
print sprintf("Total time       %.3f sec",t2-t0)
### end of script

结果:(在我用了 8 年的笔记本电脑上)

Please wait...
Generating data  11.066 sec
vfill from $Data :
        radius 0.33 gives a brick of 7 voxels on x, 7 voxels on y, 7 voxels on z
        number of points input:      100000
        number of voxels modified: 14392591
Plotting data    42.266 sec
Total time       53.332 sec

© www.soinside.com 2019 - 2024. All rights reserved.