使用splot填充3D线下方的区域

dps*_*dps 2 gnuplot

我正在为每个围栏绘制多种颜色的3D"栅栏图".我的样本数据可以在这里找到:

https://gist.github.com/anonymous/a926221ea96e92e86332

我使用这个绘制这些数据:

colors = "red red red red red"
splot for [i=1:words(colors)] 'input.sep.txt' index i u 2:1:3 w lines lc rgb word(colors,i)
Run Code Online (Sandbox Code Playgroud)

这些线条没有问题,我相信它们是正确绘制的.我的问题是:如何填充线下方,使其看起来像一个坚固的墙(即一直到0 z值)?我尝试使用w pm3d,但这实际上没有在轴上绘制任何可见的东西.

Chr*_*oph 5

您拥有的最佳选择是使用pm3d.为此,您必须稍微更改数据文件:您必须复制非常行,将副本的z值更改为0并添加新行,即前两个数据行

1 1 2
2 1 4
Run Code Online (Sandbox Code Playgroud)

必须成为

1 1 2
1 1 0

2 1 4
2 1 0
Run Code Online (Sandbox Code Playgroud)

等等.您以后仍然需要两个连续的空行来分隔不同的"墙".

如果您可以控制数据输出,则可以更改输出例程,也可以使用命令行工具 sed

sed 's/^\([0-9]* [0-9]* \)\(.*\)$/&\n\1 0\n/' gistfile1.txt
Run Code Online (Sandbox Code Playgroud)

或者awk:

awk '1; {print $1,$2,0,"\n"}' gistfile1.txt
Run Code Online (Sandbox Code Playgroud)

做转换.当然,这可以在gnuplot内即时完成.然后是一个完整的工作脚本:

filename = 'gistfile1.txt'
sed = '< sed ''s/^\([0-9]* [0-9]* \)\(.*\)$/&\n\1 0\n/'' '

set autoscale cbfix
set palette defined (0 'red', 1 'blue')
set pm3d depthorder
unset colorbox
unset key
set ticslevel 0
splot sed.filename using 1:2:3:(column(-2)) with pm3d
Run Code Online (Sandbox Code Playgroud)

使用gnuplot 4.6.5和您的示例数据的结果是:

在此输入图像描述

一些额外的说明:

  • 第四列用于选择与着色的z值不同的值.
  • column(-2)使用块编号(相邻块由两个空行分隔)作为颜色索引.
  • 属于不同数据块的点未连接.
  • 有了set autoscale cbfix你可以更好地控制用于飞机的颜色.
  • 如果你知道,你有三个应该有特定颜色的飞机你也可以使用set palette defined (0 'red', 1 'green', 2 'blue').