Linux 如何在gnuplot splot中的每个点绘制一个圆?

Linux 如何在gnuplot splot中的每个点绘制一个圆?,linux,gnuplot,Linux,Gnuplot,我正试图绘制一组存储在文件中的三维点,如在标准中 set style data lines splot 'data.dat' 除了我想在x-y平面上画一个圆,画出每个点,这样最终渲染的是一个弯曲的管子,中心线在里面 我已经能够使用参数画出单个的圆,但我不确定你会怎么做我在这里描述的 这可能吗 如果你真的想要圆,下面可能是我想到的一个解决方案。但也许你真的想要绘制一个曲面?对于这一点,可能还有其他解决方案 代码: ### circles along datapoints reset sessio

我正试图绘制一组存储在文件中的三维点,如在标准中

set style data lines
splot 'data.dat'
除了我想在x-y平面上画一个圆,画出每个点,这样最终渲染的是一个弯曲的管子,中心线在里面

我已经能够使用参数画出单个的圆,但我不确定你会怎么做我在这里描述的


这可能吗

如果你真的想要圆,下面可能是我想到的一个解决方案。但也许你真的想要绘制一个曲面?对于这一点,可能还有其他解决方案

代码:

### circles along datapoints
reset session

# create some 3D test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

Offset(i,axis) = real(word($Data[i],axis))

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      for [i=1:|$Data|] $Circle u ($1+Offset(i,1)):($2+Offset(i,2)):(Offset(i,3)) w l notitle
### end of code
### circle surface along datapoints
reset session

# create some test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

D(i,axis) = real(word($Data[i],axis))
C(i,axis) = real(word($Circle[i],axis))

# generate "tube" datapoints
set print $Tube
do for [i=1:|$Circle|] {
    do for [j=1:|$Data|] {
        print sprintf("%.3f %.3f %.3f", C(i,1)+D(j,1), C(i,2)+D(j,2), D(j,3))
    }
    print ""  # empty line
}
set print
set pm3d depthorder noborder
set pm3d lighting specular 0.5

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      $Tube u 1:2:3 w pm3d notitle
### end of code
结果:

### circles along datapoints
reset session

# create some 3D test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

Offset(i,axis) = real(word($Data[i],axis))

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      for [i=1:|$Data|] $Circle u ($1+Offset(i,1)):($2+Offset(i,2)):(Offset(i,3)) w l notitle
### end of code
### circle surface along datapoints
reset session

# create some test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

D(i,axis) = real(word($Data[i],axis))
C(i,axis) = real(word($Circle[i],axis))

# generate "tube" datapoints
set print $Tube
do for [i=1:|$Circle|] {
    do for [j=1:|$Data|] {
        print sprintf("%.3f %.3f %.3f", C(i,1)+D(j,1), C(i,2)+D(j,2), D(j,3))
    }
    print ""  # empty line
}
set print
set pm3d depthorder noborder
set pm3d lighting specular 0.5

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      $Tube u 1:2:3 w pm3d notitle
### end of code

添加:

### circles along datapoints
reset session

# create some 3D test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

Offset(i,axis) = real(word($Data[i],axis))

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      for [i=1:|$Data|] $Circle u ($1+Offset(i,1)):($2+Offset(i,2)):(Offset(i,3)) w l notitle
### end of code
### circle surface along datapoints
reset session

# create some test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

D(i,axis) = real(word($Data[i],axis))
C(i,axis) = real(word($Circle[i],axis))

# generate "tube" datapoints
set print $Tube
do for [i=1:|$Circle|] {
    do for [j=1:|$Data|] {
        print sprintf("%.3f %.3f %.3f", C(i,1)+D(j,1), C(i,2)+D(j,2), D(j,3))
    }
    print ""  # empty line
}
set print
set pm3d depthorder noborder
set pm3d lighting specular 0.5

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      $Tube u 1:2:3 w pm3d notitle
### end of code
这里是一个稍加修改的版本(可能有一种更简单的方法来实现),您可以在其中创建一个数据块
$Tube
,它可以用曲面打印。这些圆仍然平行于xy平面。尽管如此,我的怀疑是,您实际上可能希望圆与输入数据路径的方向正交

代码:

### circles along datapoints
reset session

# create some 3D test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

Offset(i,axis) = real(word($Data[i],axis))

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      for [i=1:|$Data|] $Circle u ($1+Offset(i,1)):($2+Offset(i,2)):(Offset(i,3)) w l notitle
### end of code
### circle surface along datapoints
reset session

# create some test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

D(i,axis) = real(word($Data[i],axis))
C(i,axis) = real(word($Circle[i],axis))

# generate "tube" datapoints
set print $Tube
do for [i=1:|$Circle|] {
    do for [j=1:|$Data|] {
        print sprintf("%.3f %.3f %.3f", C(i,1)+D(j,1), C(i,2)+D(j,2), D(j,3))
    }
    print ""  # empty line
}
set print
set pm3d depthorder noborder
set pm3d lighting specular 0.5

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      $Tube u 1:2:3 w pm3d notitle
### end of code
结果:

### circles along datapoints
reset session

# create some 3D test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

Offset(i,axis) = real(word($Data[i],axis))

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      for [i=1:|$Data|] $Circle u ($1+Offset(i,1)):($2+Offset(i,2)):(Offset(i,3)) w l notitle
### end of code
### circle surface along datapoints
reset session

# create some test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

D(i,axis) = real(word($Data[i],axis))
C(i,axis) = real(word($Circle[i],axis))

# generate "tube" datapoints
set print $Tube
do for [i=1:|$Circle|] {
    do for [j=1:|$Data|] {
        print sprintf("%.3f %.3f %.3f", C(i,1)+D(j,1), C(i,2)+D(j,2), D(j,3))
    }
    print ""  # empty line
}
set print
set pm3d depthorder noborder
set pm3d lighting specular 0.5

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      $Tube u 1:2:3 w pm3d notitle
### end of code

谢谢你的回答。我想你是对的——看看这张图的结果,我可能最好用一个曲面来代替。我添加了更多用于绘制曲面的代码。我应该问哪个问题!谢谢你的额外代码,看起来很棒!