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

时间:2014-08-28 13:38:05

标签: 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)

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

2 个答案:

答案 0 :(得分:5)

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

1 1 2
2 1 4

必须成为

1 1 2
1 1 0

2 1 4
2 1 0

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

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

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

awk

awk '1; {print $1,$2,0,"\n"}' gistfile1.txt

进行转换。当然,这可以在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

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

enter image description here

一些补充说明:

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

答案 1 :(得分:1)

这是一种解决方法而不是正确的解决方案,但它可能对您有用。使用filledcurves选项进行游戏,该选项并非真正用于3D绘图。你拥有的东西看起来像是:

colors = "red red red red red"
splot for [i=1:words(colors)] 'input.sep.txt' index i u 2:1:3 w filledcurve lc rgb \
word(colors,i), for [i=1:words(colors)] 'input.sep.txt' index i u 2:1:3 w l lc "black" lw 2

enter image description here

使用set dgrid3d命令的诡计技巧,可以增加绘制的垂直线的数量(在这种情况下为set dgrid3d 100,2):

enter image description here

在您对结果(set dgrid3d 200,2)感到满意之前:

enter image description here