【问题标题】:gnuplot: How to align multiplots relative to axes coordinates?gnuplot:如何相对于轴坐标对齐多图?
【发布时间】:2021-01-09 06:35:32
【问题描述】:

question 可以看出,在某些情况下,可能需要将子图相对于另一个图轴坐标对齐。

如果您查看 gnuplot 文档,您会发现标签、箭头、对象(矩形、多边形、圆形......)可以定位在不同的坐标系中,即轴、图形和屏幕(参见 help coordinates) . 然而,多图环境中的子图(据我所知)只能相对于屏幕对齐和调整大小,请参阅help originhelp size。 当然,您可以随时调整屏幕坐标来找到所需的位置,但是当终端或绘图的大小、轴标签或自动边距可能发生变化时,您将不得不重新开始。

问题:如何将一个子图相对于另一个图的坐标对齐?

【问题讨论】:

    标签: alignment gnuplot subgraph


    【解决方案1】:

    相对于另一个绘图坐标对齐子图基本上是坐标的“简单”转换,但是,如何在 gnuplot 中执行此操作并不是很明显。 我还没有在 gnuplot 主页或其他地方找到一个例子(这不应该意味着它可能不存在于某个地方),所以我想分享一种可以让生活更轻松的方法,其他人可能会觉得不这样做很有用必须“重新发明轮子”。

    代码:

    ### multiplots relative to other plots' axes coordinates
    reset session
    
    # function to store the current terminal values for later use
    GetPlotParams(n) = sprintf("%g %g %g %g %g %g %g %g", \
                       GPVAL_X_MIN, \
                       GPVAL_X_MAX-GPVAL_X_MIN, \
                       GPVAL_Y_MIN, \
                       GPVAL_Y_MAX-GPVAL_Y_MIN, \
                       real(GPVAL_TERM_XMIN)/GPVAL_TERM_XSIZE*GPVAL_TERM_SCALE, \
                       real(GPVAL_TERM_YMIN)/GPVAL_TERM_YSIZE*GPVAL_TERM_SCALE, \
                       real(GPVAL_TERM_XMAX-GPVAL_TERM_XMIN)/GPVAL_TERM_XSIZE*GPVAL_TERM_SCALE, \
                       real(GPVAL_TERM_YMAX-GPVAL_TERM_YMIN)/GPVAL_TERM_YSIZE*GPVAL_TERM_SCALE ) \
                       # real() in order to avoid integer division
    
    PosX(s,x)   = word(s,5)+word(s,7)*(x-word(s,1))/word(s,2)     # screen position of the subplot
    PosY(s,y)   = word(s,6)+word(s,8)*(y-word(s,3))/word(s,4)
    SizeX(s,dx) = word(s,7)*dx/word(s,2)                          # screen size of a subplot 
    SizeY(s,dy) = word(s,8)*dy/word(s,4)
    
    set multiplot 
    
        set title "First plot"
        set xtics 1
        set yrange[-100:100]
        set ytics 20
        set grid xtics, ytics
        plot 25*sin(2*x)/x+10 w l lw 2 notitle
        mp1 = GetPlotParams(0)      # store parameters of 1st plot
    
        # set white background for future plots
        set object 1 rect from graph 0, graph 0 to graph 1, graph 1 behind fc "white"
        set margins 0,0,0,0
    
        unset xlabel
        set format x ""
        unset ylabel
        set format y ""
        set grid x2tics, ytics
    
        # second plot
        set title "2^{nd} plot at -9,30 rel. to first plot" offset 0,-0.5
        set origin PosX(mp1,-9),PosY(mp1,30)        # relative to plot1
        set size SizeX(mp1,5),SizeY(mp1,50)         # relative to plot1
        plot 50*sin(x) w l lc "red" notitle
        mp2 = GetPlotParams(0)   # store parameters of 2nd plot
    
        # third plot
        set title "3^{rd} plot at 4,30 rel. to first"
        set origin PosX(mp1,4),PosY(mp1,30)         # relative to plot1
        set size SizeX(mp1,5),SizeY(mp1,50)         # relative to plot1
        set format y ""
        plot 50*cos(x)+20*sin(2*x) w l lc "magenta" notitle
        mp3 = GetPlotParams(0)   # store parameters of 3rd plot
        
        # fourth plot
        set title "4^{th} plot from 2^{nd} x=0 to 3^{nd} x=0"
        set origin PosX(mp2,0),PosY(mp1,-80)             # relative to plot1 and plot2
        set size PosX(mp3,0)-PosX(mp2,0),SizeY(mp1,60)   # relative to plot1, plot2 and plot3
        set xrange [*:*]
        set format x
        set yrange[*:*]
        set format y
        plot x**2 w l lc "green" notitle
        mp4 = GetPlotParams(0)   # store parameters of 4th plot
        
        # fifth plot
        set title "5^{th} plot" offset 0,-1
        set origin PosX(mp4,-4),PosY(mp4,20)     # relative to plot4
        set size SizeX(mp1,5),SizeY(mp4,60)      # relative to plot1 and plot4
        set format x ""
        set format y ""
        plot (int(2*x)%5)*8 w l lc "blue" notitle
        mp5 = GetPlotParams(0)
     
    unset multiplot
    ### end of code
    

    结果:(其实是个废话,只是为了说明。终端:set term wxt size 650,480

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-05
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多