首页 > 解决方案 > Gnuplot:用一种颜色填充的 splot 网格

问题描述

我一直在考虑gnuplot通过带有参数选项的显式公式绘制一些 3d 图。我想用一种颜色填充网格间隙。我知道我可以例如使用with pm3d选项填充网格,但是颜色与函数z参数有关。这是一个例子:

set parametric
set hidden3d
sp u,u,u*v w pm3d,\
   v,u*v,v w pm3d

示例图

如何将第一条曲线的颜色(在 splot 网格内)设置为蓝色,将另一条曲线设置为红色?

标签: 3dgnuplot

解决方案


有一个简单的答案可以完全满足您的要求,但它仅在 gnuplot 的开发版本中可用。以前的版本有一个错误,导致显式颜色的分配与 pm3d 中的隐藏表面处理不兼容。如果您能够从开发 git 存储库构建 gnuplot,它将接受以下命令序列:

set parametric
set pm3d depthorder
sp u,u,u*v w pm3d fillcolor "blue", \
   v,u*v,v w pm3d fillcolor "red"

请注意,“set hidden3d”不适用于 pm3d 表面。如果您无法从源代码构建,那么您最好的选择是切换到非参数等效项和自定义调色板,您知道一些调色板值是蓝色的,另一个是红色的。在这种情况下,命令序列将类似于

unset parametric
set palette defined (0.0 "red", 1.0 "blue")
set pm3d depthorder noborder
splot '++' using 1:1:($1*$2):(1.0) with pm3d, \
      '++' using 2:($1*$2):2:(0.0) with pm3d

pm3d 中的曲面相交不是平滑的,因为每个面要么被绘制要么不被绘制,没有碰巧相交的面的细分。您可以通过使用更精细的网格来最小化这种情况:

set samples 200
set isosamples 200

推荐阅读