如何在gnuplot中绘制蜘蛛图?

如何在gnuplot中绘制蜘蛛图?,gnuplot,spider-chart,Gnuplot,Spider Chart,假设我的数据的格式为: #atom a b c 43 1.2 1.3 1.4 44 1.2 1.4 1.8 45 1.3 1.8 1.9 46 2.0 2.3 2.4 47 1.5 1.6 1.8 我想要一个这样的情节(中间的那个) 我该怎么做 注:此处()的标题有误导性…据我所知,没有直接提供链接输出的内置功能。然而,人们可以利用Gnuplot提供的工具进行即兴创作。该战略将是: 分析文件并确定顶点数 在参数化模式下生成“polygonial”网格 使用填充曲线打印样式(带透明度)打印数据

假设我的数据的格式为:

#atom a b c
43 1.2 1.3 1.4
44 1.2 1.4 1.8
45 1.3 1.8 1.9
46 2.0 2.3 2.4
47 1.5 1.6 1.8
我想要一个这样的情节(中间的那个)

我该怎么做


注:此处()的标题有误导性…

据我所知,没有直接提供链接输出的内置功能。然而,人们可以利用Gnuplot提供的工具进行即兴创作。该战略将是:

  • 分析文件并确定顶点数
  • 在参数化模式下生成“polygonial”网格
  • 使用
    填充曲线
    打印样式(带透明度)打印数据
  • 例如(数据表示为数据块,而不是直接传递文件):

    重置会话
    设置终端pngcairo增强字体“Times,16”
    设置输出“plot.png”
    
    $DATA
    数组
    行表示该命令无效。获得gnuplot版本5.0补丁级别6@murpholinox数组支持是在5.1中添加的,我已经修改了答案,以便它使用
    word
    函数解决方案…非常感谢。你能解释一下吗P非常感谢你的回答。事实上,在我的例子中,第一列表示一个字符串值(基本上是蜘蛛图的“顶点”的名称)。因此,在sprintf中使用setlabel的技巧不起作用,因为它需要一个失败的stat命令。我通过删除setlabel循环并在所有其他绘图数据文件u(posX($0,maxR*1.1)):(posY($0,maxR*1.1)):1 w标签,\…
    reset session
    set terminal pngcairo enhanced font "Times,16"
    set output 'plot.png'
    
    $DATA << EOD
    #atom a b c
    43 1.2 1.3 1.4
    44 1.2 1.4 1.8
    45 1.3 1.8 1.9
    46 2.0 2.3 2.4
    47 1.5 1.6 1.8
    EOD
    
    stats $DATA nooutput
    
    N = STATS_columns
    M = STATS_records
    
    set angles degrees
    set size ratio -1
    set style fill transparent solid 0.25
    
    unset key
    unset border
    unset xtics
    unset ytics
    
    colors = "dark-red royalblue forest-green"
    
    set style line 42 lt 1 lc rgb '#333333' dt 3 lw 0.8
    
    deltaR = 0.5
    maxR = 3 + deltaR/4
    numOfStepsInR = floor((1.*maxR) / deltaR)
    
    #helper functions
    alpha(i) = 90. - i*360./M
    posX(i, r) = cos(alpha(i))*r
    posY(i, r) = sin(alpha(i))*r
    lcolor(i) = word(colors, i%words(colors) + 1)
    
    do for [i=0:M-1] {
      stats $DATA every ::i::i using (labelValue=$1) nooutput
      set label sprintf("%d", labelValue) at posX(i,maxR),posY(i,maxR) center offset char posX(i,1),char posY(i,1)
    }
    
    do for [j=1:numOfStepsInR] {
      set label sprintf("%.1f", j*deltaR) at 0,j*deltaR left offset char 0.5,0 tc rgb '#333333'
    }
    
    set parametric
    set tr [0:1]
    
    set xr [-1.1*maxR:1.1*maxR]
    set yr [-1.1*maxR:1.1*maxR]
    
    plot \
      for [i=0:M-1] \
        (cos(alpha(i))*(deltaR*(1-t)+t*maxR)),(sin(alpha(i))*(deltaR*(1-t)+t*maxR)) w l ls 42, \
      for [i=0:M-1] for [j=1:numOfStepsInR] \
        (j*deltaR*cos(alpha(i))*t + (1-t)*j*deltaR*cos(alpha(i+1))),(j*deltaR*sin(alpha(i))*t + (1-t)*j*deltaR*sin(alpha(i+1))) w l ls 42, \
      for [i=2:N] $DATA u (posX($0, column(i))):(posY($0, column(i))) w filledcurves closed fc rgb lcolor(i-2) fs border lc rgb lcolor(i-2) lw 2, \
      for [i=2:N] $DATA u (posX($0, column(i))):(posY($0, column(i))) w p ps 1.2 pt 7 lc rgb lcolor(i-2)