我正在绘制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
,但实际上并没有在轴上绘制任何可见的东西。
答案 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和示例数据的结果是:
一些补充说明:
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
使用set dgrid3d
命令的诡计技巧,可以增加绘制的垂直线的数量(在这种情况下为set dgrid3d 100,2
):
在您对结果(set dgrid3d 200,2
)感到满意之前: