【问题标题】:how to calculate or set size of gnuplot margins + labels + legend如何计算或设置gnuplot边距+标签+图例的大小
【发布时间】:2014-06-13 16:00:53
【问题描述】:

我们有一个需要像素完美的大频谱图(1 行 = 100ms 的数据,1 列 = fft 的 1 个频率区间)。我使用下面的代码来计算绘图的大小:

  set terminal unknown
  sedcmd="<(sed -n '1p;" .rowstart. "," .rowend. "p' " .filename. ".csv)"
  plot sedcmd nonuniform matrix using 2:1:3 notitle with image
  xspan = GPVAL_DATA_X_MAX - GPVAL_DATA_X_MIN
  yspan = GPVAL_DATA_Y_MAX - GPVAL_DATA_Y_MIN
  set terminal png size (rowend-rowstart),yspan
  sedcmd="<(sed -n '1p;" .rowstart. "," .rowend. "p' " .filename. ".csv)"
  plot sedcmd nonuniform matrix using 2:1:3 notitle with image

rowstart 和 rowend 是传入 gnuplot 的变量,它们表示频率区间。这可以正常工作,但有一个例外,它没有考虑图例和标签所需的空间。我如何计算或设置像素以便:

[ylabels][                     PLOT             ][LEGEND]
[                      xlabels                          ]

PLOT 将是我指定的确切尺寸(即:1000x1000)

编辑:绘图大小和边距的最终计算代码:

# margins and plotsize
rowstart = 2457     # rowstart/end represent the fft bins
rowend = 5734       # plot is actually rotated 90deg (rows are cols)
cols = 6970     # number of ms in plot (plotted rows)
plotwidth = (rowend - rowstart) +1
plotheight = cols
lm = 1200.00
rm = 600
tbmargin = 200.00
width = plotwidth + (lm + rm)
height = plotheight + (tbmargin * 2)
set lmargin at screen lm / width
set rmargin at screen 1 - (rm / width)
set tmargin at screen tbmargin / height
set bmargin at screen 1 - (tbmargin / height)
show margin

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    如果你知道你想要的地块的确切大小,它会很有帮助。如果你想要一个 1000x1000 的绘图,你可以从:

    s = 1250 # size of plot
    set terminal pngcairo size 1250,1250
    set output 'spectrogram.png'
    
    # difference between l/r and t/b margins = (0.9-0.1)*1250 = 1000 px
    set lmargin at screen 0.1
    set rmargin at screen 0.9
    set bmargin at screen 0.1
    set tmargin at screen 0.9
    
    plot ...
    

    我发现在摆弄像素完美的绘图形状(例如 herehere)时,做一些基本的代数并使用 *margin 命令非常有用。

    可能有 1 px 的差异——我不确定轴是从 0 到 1 px 还是从 -1 到 0 绘制的,就绘图边缘而言。

    【讨论】:

    • 这与我正在寻找的非常接近,但是我需要计算边距宽度。我知道我希望绘图为 1000x1000,但我不知道如何制作总尺寸以便正确打印轴和图例。
    • 我不知道一种方法(例如变量)包含有关图例宽度的信息;您可能必须猜测并检查才能找到有效的方法。另外,我认为 ylabels 和图例是边距区域的 part - 您是否认为边距是任何绘制元素之外的空间?
    • 我认为图例和标签是边距区域的一部分。我所做的是添加了一些变量,以便我可以将它们调整到我想要的大小......请参阅第一个问题中编辑的代码
    猜你喜欢
    • 2018-07-08
    • 1970-01-01
    • 2022-06-10
    • 2014-08-01
    • 2014-06-30
    • 1970-01-01
    • 2014-09-25
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多