Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Colors gnuplot:如何使用splot和pm3d保持恒定的颜色?_Colors_3d_Gnuplot_Surface - Fatal编程技术网

Colors gnuplot:如何使用splot和pm3d保持恒定的颜色?

Colors gnuplot:如何使用splot和pm3d保持恒定的颜色?,colors,3d,gnuplot,surface,Colors,3d,Gnuplot,Surface,基本上,我想通过参数化的splot(下图,上图)绘制彩色球体。然而,我无法找到一种方法使它们的颜色一致,但每个球体的颜色不同 我找到了这篇文章(),它告诉我首先将球体绘制成一个数据块,然后再绘制移位的数据块(下图,中间) 现在,我想添加一些行。但是球体的颜色意外地改变了它们的颜色(下图,底部)。 为什么?如何避免?我怎样才能保持原来想要的颜色 我的代码: ### connected 3D-spheres with splot and pm3d reset session set obj 1 re

基本上,我想通过参数化的
splot
(下图,上图)绘制彩色球体。然而,我无法找到一种方法使它们的颜色一致,但每个球体的颜色不同

我找到了这篇文章(),它告诉我首先将球体绘制成一个数据块,然后再绘制移位的数据块(下图,中间)

现在,我想添加一些行。但是球体的颜色意外地改变了它们的颜色(下图,底部)。 为什么?如何避免?我怎样才能保持原来想要的颜色

我的代码:

### connected 3D-spheres with splot and pm3d
reset session
set obj 1 rect from screen 0,0,0 to screen 1,1,0 behind 
set obj 1 rect fc rgb "black" fs solid 1.0
set view equal xyz
set view 45,45 
unset border
unset tics
unset colorbox

set style fill solid 1.0 noborder
set pm3d depthorder noborder
set pm3d lighting specular 0.5

set isosamples 50,50
set parametric
set urange [-pi/2:pi/2]
set vrange [0:2*pi]
Radius = 1
set table $Sphere
    splot Radius*cos(u)*cos(v), Radius*cos(u)*sin(v), Radius*sin(u)
unset table
unset parametric

$Pos <<EOD
0 0 0
4 0 0
4 4 0
0 4 0
EOD

$Bonds <<EOD
0 0 0
4 0 0

4 0 0
4 4 0

4 4 0
0 4 0

0 4 0
0 0 0
EOD

PosX(i) = word($Pos[i],1)
PosY(i) = word($Pos[i],2)
PosZ(i) = word($Pos[i],3)

set palette defined (1 'red', 2 'green', 3 'blue', 4 'yellow')

set multiplot layout 3,1
    set parametric
        splot for [i=1:4] Radius*cos(u)*cos(v)+PosX(i), Radius*cos(u)*sin(v)+PosY(i), \
        Radius*sin(u)+PosZ(i) with pm3d not
    unset parametric
    unset obj 1 
    splot \
        for [i=1:4] $Sphere u ($1+PosX(i)):($2+PosY(i)):($3+PosZ(i)):(i) with pm3d not
    splot \
        for [i=1:4] $Sphere u ($1+PosX(i)):($2+PosY(i)):($3+PosZ(i)):(i) with pm3d not,\
        $Bonds u 1:2:3 w l lw 4 lc rgb "grey" not
unset multiplot
### end of code
####用splot和pm3d连接3D球体
重置会话
将obj 1 rect从屏幕0,0,0设置为后面的屏幕1,1,0
将obj 1矩形fc rgb“黑色”fs实体设置为1.0
将视图设置为相等xyz
设置视图45,45
未设置边界
不稳定抽搐
未设置色盒
将样式填充实体设置为1.0
设置pm3d拆卸顺序
将pm3d照明镜面反射设置为0.5
将isosamples设置为50,50
设置参数
设定保险费[-pi/2:pi/2]
设置量程[0:2*pi]
半径=1
设置表$Sphere
散斑半径*cos(u)*cos(v),半径*cos(u)*sin(v),半径*sin(u)
未设置的表
未设置参数

$Pos这里有第二个解决方案,它不需要设置调色板。 注意,这需要gnuplot(版本5.3)的开发分支提供的特性。它将出现在未来的稳定版本中,但尚未出现在5.2.6版中

[如上所述的准备工作,然后是]

set palette defined (1 'red', 2 'green', 3 'blue', 4 'yellow')
set style line 1 lc 'red'
set style line 2 lc 'green'
set style line 3 lc 'blue'
set style line 4 lc 'yellow'

set multiplot layout 1,3
    set parametric
        splot for [i=1:4] Radius*cos(u)*cos(v)+PosX(i), Radius*cos(u)*sin(v)+PosY(i), \
        Radius*sin(u)+PosZ(i) with pm3d not
    unset parametric
    unset obj 1
    splot \
        for [i=1:4] $Sphere u ($1+PosX(i)):($2+PosY(i)):($3+PosZ(i)):(i) with pm3d not
    splot \
        for [i=1:4] $Sphere u ($1+PosX(i)):($2+PosY(i)):($3+PosZ(i)) with pm3d fc ls i not,\
        $Bonds u 1:2:3 w l lw 4 lc rgb "grey" not
unset multiplot
使用pm3d fc lt i也可以(线型而非线型)


我怀疑Fencepost错误。在最终绘图之前,请尝试设置cbrange[1:4]
。谢谢,这很有效!实际上,我还可以在第一个绘图之前放置
set cbrange[1:4]
。但我仍然不明白为什么只有当我有一个组合的
splot
-命令时才会发生这种情况:
splot$Sphere$Bonds…
您所说的“围栏柱”错误是什么意思?要围栏N个单位的长度,需要N+1个围栏柱。您已经定义了具有四种固定颜色的调色板。这些是“栅栏柱”。如果希望固定颜色正好落在cb的整数值上,则cb的总跨度必须为3。最终绘图的z范围为[0:4](所有“键”都位于z=0)。所以总跨度是4。如果拉伸长度为3的调色板以跨越长度为4的cb范围,则固定颜色将落在非整数值上。您可以通过固定cb的总跨度以匹配调色板的跨度来解决此问题。不幸的是,使用pm3d fc ls i
或使用pm3d fc lt i的
对我不起作用。我得到指向
fc
的错误
意外或无法识别的令牌。(使用gnuplot 5.2.6、Win7、wxt终端)我将编辑答案以注意它需要更新版本的gnuplot。