You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

十万级3D插值密度图着色方案咨询(支持Gnuplot/Mathematica)

解决方案:将离散3D点转换为连续插值密度图

针对你的需求,以下分别提供Gnuplot和Mathematica的实现方案,均能生成颜色连续渐变的电荷类密度分布效果。

Gnuplot实现

利用Gnuplot的dgrid3d插值功能生成规则网格,配合pm3d绘制连续颜色填充的3D曲面,步骤如下:

# 定义颜色映射:负为深红,0为白,正为深蓝,增加颜色梯度让过渡平滑
set palette defined (-0.01 "dark-red", 0 "white", 0.01 "dark-blue")
set palette maxcolors 1000

# 启用3D数据插值,设置网格分辨率(数值越大精度越高,计算时间越长)
set dgrid3d 100,100,100 qnorm 2  # qnorm 2采用距离加权插值,更贴合密度分布

# 配置pm3d样式,确保颜色连续过渡和正确的3D遮挡
set style pm3d depthorder
set pm3d interpolate 2,2  # 对颜色进行二次插值,消除色块断层

# 绘制连续密度图
splot "filename" u 1:2:3:4 with pm3d notitle
  • 如果需要展示内部结构,可添加set style fill transparent solid 0.5开启半透明效果;
  • 调整dgrid3d后的数值可以控制插值网格的精细程度,根据你的硬件性能灵活调整。

Mathematica实现

Mathematica对大数据插值和体渲染支持更友好,适合处理十万级数据量,代码如下:

(* 导入数据(假设为逗号分隔的CSV格式) *)
data = Import["filename.csv", "Table"];

(* 拆分坐标与颜色值 *)
coords = data[[All, 1 ;; 3]];
cVals = data[[All, 4]];

(* 创建连续插值函数(InterpolationOrder设为2保证平滑过渡) *)
interpFunc = ListInterpolation[cVals, Transpose[coords], InterpolationOrder -> 2];

(* 自定义颜色函数:严格匹配负红、正蓝、0白,颜色深度随绝对值递增 *)
colorFunc[val_] := Which[
  val < 0, RGBColor[1 - Rescale[Abs[val], {0, Max[Abs[cVals]]}, {0, 0.8}], 0, 0],  (* 深红渐变 *)
  val > 0, RGBColor[0, 0, 1 - Rescale[Abs[val], {0, Max[Abs[cVals]]}, {0, 0.8}]],  (* 深蓝渐变 *)
  val == 0, White
]

(* 生成体渲染的连续密度图 *)
VolumePlot3D[interpFunc[x, y, z], {x, -0.5, 0.5}, {y, -0.5, 0.5}, {z, -0.5, 0.5},
  ColorFunction -> colorFunc,
  ColorFunctionScaling -> False,
  OpacityFunction -> (0.3 &),  (* 半透明展示内部结构 *)
  PlotPoints -> 80,  (* 控制绘图精度 *)
  AxesLabel -> {"x", "y", "z"}
]
  • 若不需要体渲染,可替换为SliceContourPlot3D绘制中心截面的连续颜色图;
  • Max[Abs[cVals]]会自动匹配你数据中c值的最大绝对值,无需手动调整-0.01这类固定值。

内容的提问来源于stack exchange,提问作者Kregnach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:47:05