【问题标题】:Gnuplot: plotting points with variable point typesGnuplot:使用可变点类型绘制点
【发布时间】:2020-01-04 06:54:13
【问题描述】:

我在一个数据文件中的前 2 列中有点的 x,y 值和一个表示第 3 列中点类型(符号)的数字。如何用不同的符号绘制数据点?

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    不幸的是,没有办法(AFAIK)使用 vanilla GNUPLOT 从列值自动设置绘图点。

    但是,有一种方法可以解决这个问题,方法是为每个数据系列设置线型,然后根据定义的样式绘制值:

    set style line 1 lc rgb 'red' pt 7 #Circle
    set style line 2 lc rgb 'blue' pt 5 #Square 
    

    记住pt后面的数字是point-type。

    然后,你所要做的就是绘制(假设“data.txt”中的数据排序为 ColX ColY Col3):

    plot  "data.txt" using 1:2 title 'Y Axis' with points ls 1, \
    "data.txt" using 1:3 title 'Y Axis' with points ls 2
    

    Try it here 使用此数据(在标题为“数据”的部分 - 另请注意,第 3 列“符号”已被使用,主要用于说明目的):

    # This file is called   force.dat
    # Force-Deflection data for a beam and a bar
    # Deflection    Col-Force       Symbol 
    0.000              0              5
    0.001            104             5
    0.002            202            7
    0.003            298            7
    

    在情节脚本标题中:

    set key inside bottom right
    set xlabel 'Deflection (m)'
    set ylabel 'Force (kN)'
    set title 'Some Data'
    set style line 1 lc rgb 'red' pt 7
    set style line 2 lc rgb 'blue' pt 5
    plot  "data.txt" using 1:2 title 'Col-Force' with points ls 1, \
    "data.txt" using 1:3 title 'Beam-Force' with points ls 2
    

    一个警告当然是您必须重新配置数据输入源。

    参考:

    http://www.gnuplotting.org/plotting-single-points/

    http://www.gnuplotting.org/plotting-data/

    【讨论】:

      【解决方案2】:

      这是一个可能的解决方案(这是从 gnuplot conditional plotting with if 的一个简单推断),只要您没有数十个不同的符号需要处理,它就可以工作。

      假设我想在坐标系中绘制二维点。我只有两个符号,我在数据文件的最后一列用 0 和 1 任意表示:

      0 -0.29450470209121704 1.2279523611068726 1 
      1 -0.4006965458393097 1.0025811195373535 0 
      2 -0.7109975814819336 0.9022682905197144 1 
      3 -0.8540692329406738 1.0190201997756958 1 
      4 -0.5559651851654053 0.7677079439163208 0 
      5 -1.1831613779067993 1.5692367553710938 0 
      6 -0.24254602193832397 0.8055955171585083 0 
      7 -0.3412654995918274 0.6301406025886536 0 
      8 -0.25005266070365906 0.7788659334182739 1 
      9 -0.16853423416614532 0.09659398347139359 1 
      10 0.169997438788414 0.3473801910877228 0 
      11 -0.5252010226249695 -0.1398928463459015 0 
      12 -0.17566296458244324 0.09505800902843475 1 
      

      为了实现我想要的,我只是使用条件来绘制我的文件。使用像 1/0 这样的未定义值会导致不绘制给定点:

      # Set styles
      REG_PTS = 'pointtype 7 pointsize 1.5 linecolor rgb "purple"'
      NET_PTS = 'pointtype 4 pointsize 1.5 linecolor rgb "blue"'
      set grid
      
      # Plot each category with its own style
      plot "data_file" u 2:($4 == 0 ? $3 : 1/0) title "regular" @REG_PTS, \
           "data_file" u 2:($4 == 1 ? $3 : 1/0) title "network" @NET_PTS
      

      结果如下:

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-28
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多