Wednesday, August 12, 2009

gnuplot速查

绘制曲线

  1. 绘制预定义的函数:
    plot sin(x)+exp(x)
    除了sin(x)外, 还支持的其他函数包括: abs(x),acos(x),asin(x),atan(x),cos(x),cosh(x),erf(x),exp(x),inverf(x),invnorm(x),log(x),log10(x),norm(x),rand(x),sgn(x),sin(x),sinh(x),sqrt(x),tan(x),tanh(x).
  2. 绘制自定义函数:当预定义的函数不够用的时候,我们可以自己定义函数
    y(x)=x**2+log(x)
    z(x)=x**3-x
    gnuplot还支持?:这种C风格的函数.比如
    f(x) = x < 1 ? 1
         : x < 2 ? 3
                 : 5
    就是f(x) =1 if x<1, =3 if 1<=x<2 =5 otherwise
    然后绘制上述两自定义函数的图像:
    plot y(x), z(x)
    还可以直接这样作:
    plot y(x) = x**2+log(x), y(x), z(x)=x**3-x, z(x)
  3. 从文件中读取数据并绘图:
    使用foo.dat第1列(作为x)和第2列(作为y)来画图
    plot "foo.dat" using 1:2
    使用foo.dat第1列和第2列作为数据,但每2行skip掉一行
    plot "foo.dat" using 1:2 every 2
    使用foo.dat第1列(作为x)和第2列(作为y)做第一条曲线,使用foo.dat第1列(作为x)和第3列(作为y)做第二条曲线
    plot "foo.dat" using 1:2, "foo.dat" using 1:3
    foo.dat第3列作为errobar:
    plot "foo.dat" using 1:2:3 with yerrorbars
    foo.dat的第二列除以第一列作为y值
    plot "foo.dat" using 1:($2/$1)
    foo.dat分为若干个block(block之间用两行回车隔开), 使用第2个block绘图
    plot "foo.dat" index 1 using 1:2
  4. 重绘:
    replot
  5. 指定曲线的名称:
    plot "foo.dat" using 1:2 title "sample curve"

曲线样式设定

  1. 指定曲线种类
    曲线种类包括`lines`, `points`, `linespoints`, `impulses`,
    `dots`, `steps`, `fsteps`, `histeps`, errorbars, `xerrorbars`,
    `yerrorbars`, `xyerrorbars`, errorlines, `xerrorlines`,
    `yerrorlines`, `xyerrorlines`, `boxes`, `filledcurves`, `boxerrorbars`,
    `boxxyerrorbars`, `financebars`, `candlesticks`, `vectors`
    plot "foo.dat" using 1:2 with lines # 用线条画图
    plot "foo.dat" using 1:2 with points # 用点画图
    plot "foo.dat" using 1:2 with linespoints # 用点线结合的方式画图
    plot "foo.dat" using 1:2 with boxes # bar-chart
    plot "foo.dat" using 1:2:(sprintf("%.2f", $2)) with labels # 在图上标注数字
    
    更多的曲线样式比如financebars等 参见Plot Style , errorbars
    plot  "foo.dat" using 1:2:3:4:(width)\
            with boxerror fs pattern 1 #x:mean:min:max:box_width

    给定了曲线样式, 它的还有四种参数可以自行设定:linetype, linewidth, pointtype, pointsize. 可以用test 命令查看所有支持的style.
  2. 指定曲线颜色(linetype)
    plot "foo.dat" using 1:2 with lines linetype 1
    lt(linetype)指定点或者线的颜色-1=black 1=red 2=grn 3=blue 4=purple 5=aqua 6=brn 7=orange 8=light-brn
    或者通过更直接的linecolor方式指定颜色(gnuplot 4.2 or later),比如
    plot "foo.dat" using 1:2 with lines linecolor rgb "red" 
    plot "foo.dat" using 1:2 with lines linecolor  rgb "#ff0000"
  3. 指定曲线宽度(linewidth)
    plot "foo.dat" using 1:2 with lines linewidth 6
  4. 指定marker(pointtype)
    可以单独对每条曲线指定marker size,
    plot "foo.dat" using 1:2 with points pointsize 2
    也可以对所有曲线指定(默认大小为1)
    set pointsize 2
    如果使用points 或者linepoints画曲线的话,这里的piont相当于marker.可以用 pointtype和pointsize指定marker的样式和大小。
    pt指定marker的种类1=diamond 2=+ 3=square 4=X 5=triangle 6=*
  5. 自定义linestyle
    如果觉得在plot语句中使用上述这些曲线修饰太麻烦,有碍观瞻,可以实现设定好一个linestyle, 然后在plot语句中指明使用该种style. 比如
    set style line 1 lt 1 lw 1 lc rgb "red"
    set style line 6 lt 2 lw 3 lc rgb "blue"
    plot sin(x) w l linestyle 1, cos(c) w lp linestyle 2
坐标轴设定

  1. 设定坐标轴名称:
    set xlabel "time(t)"
    set ylabel "A"
    使用LaTeX数学符号:
    set ylabel "{/Symbol f_i}"
  2. 设定坐标轴为logscale:
    set logscale x
    取消logscale的x轴
    unset logscale x
  3. 坐标轴的刻度的格式

    每个刻度值后面加上百分号
    set format x  "%g%%"
    以指数形式表现, 比如10^1, 10^2,10^3而不是10, 100, 1000
    set format x  "10^{%L}"
  4. 设置坐标轴的范围
    set xrange [-3:65]
    set yrange [ 4:14]
    也可以在绘制的时候指定:
    plot [-3:65] sin(x)
  5. 指定坐标轴刻度
    set xtics ("x=1" 1, "x=10" 10, "x=100" 100)
  6. 指定坐标轴刻度间隔宽度
    set xtics 100
  7. 指定坐标轴刻度起始值和间隔
    set xtics 0, 100  #坐标轴小于0的部分就没有刻度了
  8. 去除坐标轴刻度的mirror(x2,y2默认不在x,y上有mirror, 但是x,y默认在x2,y2上有)
    set ytics nomirror  #y坐标轴的tics在y2上没有mirror
  9. 将X坐标值作为日期来显示
    set xdata time
    set timefmt "%s" #输入时间数据形式为time()函数返回值
    set format x "%b/%y" #输出时间数据形式为month/year
图例

  1. 图例的位置可以是"left", "right", "top", "bottom", "outside" 和 "below",
    默认是"right top",
    set key left bottom
    set key outside
    也可以用坐标指定(这里的坐标是指图例中第一行文字和符号之间的中点坐标)
    如果你使用的gnuplot 4.6以下
    set key 100,40
  2. 如果你使用的gnuplot 4.6以上
    set key at 100,40

  • 图例字体大小不能单独设定,使用的是在set term中指定的大小
  • 取消图例
    unset key
  • 输出

    1. 输出显示在屏幕上:
      set term x11
    2. 输出为eps文件(默认输出在stdout上,所以你将看见大批ps指令):
      set term postscript eps enhanced
    3. 输出为png文件(默认输出在stdout上,所以你将看见大量binary被输出):
      set term png
    4. 将输出放在文件上
      如果另存为eps文件
      set output "foo.eps"
      如果另存为png文件
      set output "foo.png"
    图的大小

    1. 设定X轴与Y轴的横纵比例为3:1
      set size ratio 3
    2. 设定整个figure(包括了坐标轴以及边距)的横纵比例为2:1(默认值是1:1)
      set size 2,1
    3. 生成figure的绝对大小是和terminal相关的
    其他

    1. 网格
      set grid
      set grid y
      unset grid
    2. 边框. 边框的设定可见这里. 简单说来就是通过一个掩码来指定用哪几个边框1(bottom), 2(left), 4(top), 8(right)
      unset border # 没有边框
      set border 3 #只留下左边和下边的边框
      
    3. 消除生成的eps周围过多的margin
      $eps2eps input.eps output.eps
    4. 在指定坐标上绘制label
      set label center at 11.5,1.5 "My-Fav-Label!" font ",6"
    5. 读取并执行一个gnuplot文件,比如把一些命令或者设定放在一个文件里
      load "your-gnuplot-file"

    参考:

    [1] 史上最好的gnuplot参考,有木有?
    [2] set命令可以设定的参数
    [3] gnuplot 使用技巧
    [4] 和latex的psfrag配合使用
    [5] Gnuplot tricks: 相当赞的一个帖子
    [6] Gnuplot的demo,可以照着选自己需要的样式

    No comments: