代码之家  ›  专栏  ›  技术社区  ›  sdaau

gnuplot中带有数字x轴的直方图?

  •  3
  • sdaau  · 技术社区  · 14 年前

    我把这个文件作为 data.dat

    Xstep Y1 Y2 Y3 Y4
    332 1.22 0.00 0.00 1.43
    336 5.95 12.03 6.11 10.41
    340 81.05 81.82 81.92 81.05
    394 11.76 6.16 10.46 5.87
    398 0.00 0.00 1.51 1.25
    1036 0.03 0.00 0.00 0.00
    

    我可以用这个脚本把这些数据绘制成直方图, hist-v1.gplot (使用 set style data histogram

    set xlabel "X values"
    set ylabel "Occurence"
    set style data histogram
    set style histogram cluster gap 1
    set style fill solid border -1
    set term png
    set output 'hist-v1.png'
    set boxwidth 0.9
    # attempt to set xtics so they are positioned numerically on x axis:
    set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
    # ti col reads the first entry of the column, uses it as title name 
    plot 'data.dat' using 2:xtic(1) ti col,  '' u 3 ti col, '' u 4 ti col, '' u 5 ti col
    

    打电话给:

    gnuplot hist-v1.gplot && eog hist-v1.png
    

    此图像生成于: image hist-v1.png

    hist-v2.gplot (使用 with boxes ):

    set xlabel "X values"
    set ylabel "Occurence"
    # in this case, histogram commands have no effect
    set style data histogram
    set style histogram cluster gap 1
    set style fill solid border -1
    set term png
    set output 'hist-v2.png'
    set boxwidth 0.9
    set xr [330:400]
    # here, setting xtics makes them positioned numerically on x axis:
    set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
    # 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
    plot 'data.dat' using 1:2 ti col smooth frequency with boxes, '' u 1:3 ti col smooth frequency with boxes
    

    打电话给:

    gnuplot hist-v2.gplot && eog hist-v2.png
    

    image hist-v2.png http://img266.imageshack.us/img266/6717/histv2.png

    有没有办法保持X轴的数值比例如图所示 hist-v2.png hist-v1.png ? “这条线” Re: Histogram with x axis date error “说你不能:

    但是,它指的是另一个问题。。。

    谢谢,

    干杯!

    2 回复  |  直到 5 年前
        1
  •  2
  •   sdaau    14 年前

    好的,看完报纸 gnuplot 有一点帮助,直方图样式似乎“总是”将x轴解释为连续的条目/类别-所以实际上,似乎没有办法用直方图样式获得数字轴。

    然而,事实证明 $ frequency with boxes hist-v2b.gplot :

    set xlabel "X values"
    set ylabel "Occurence"
    set style fill solid border -1
    set term png
    set output 'hist-v2.png'
    set boxwidth 0.9
    set xr [330:400]
    # here, setting xtics makes them positioned numerically on x axis:
    set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
    # 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
    plot 'data.dat' using ($1-0.5):2 ti col smooth frequency with boxes, '' u ($1-0.25):3 ti col smooth frequency with boxes, '' u ($1+0.25):4 ti col smooth frequency with boxes, '' u ($1+0.5):5 ti col smooth frequency with boxes
    

    打电话给:

    gnuplot hist-v2b.gplot && eog hist-v2b.png
    

    此图像生成于: image hist-v2b.png http://img823.imageshack.us/img823/805/histv2b.png

    ... 这正是我一开始想要的。

    plot '-' using ($1-0.5):2 ti col smooth frequency with boxes, '-' u ($1-0.25):3 ti col smooth frequency with boxes
    Xstep Y1 Y2 Y3 Y4
    332 1.22 0.00 0.00 1.43
    336 5.95 12.03 6.11 10.41
    340 81.05 81.82 81.92 81.05
    394 11.76 6.16 10.46 5.87
    398 0.00 0.00 1.51 1.25
    1036 0.03 0.00 0.00 0.00
    end
    Xstep Y1 Y2 Y3 Y4
    332 1.22 0.00 0.00 1.43
    336 5.95 12.03 6.11 10.41
    340 81.05 81.82 81.92 81.05
    394 11.76 6.16 10.46 5.87
    398 0.00 0.00 1.51 1.25
    1036 0.03 0.00 0.00 0.00
    end
    

    ... 也就是说,数据必须输入多次,因为它来自stdin—这个问题将在中讨论 gnuplot - do multiple plots from data file with built-in commands

    干杯!

        2
  •  1
  •   hsxz    13 年前

    使用“框”打印样式打印直方图时,正确设置框宽度非常重要。在我的一篇博客文章中,我谈到了这一点。如果有兴趣,点击 here

    enter image description here