如何计算或设置gnuplot边距的大小+;标签&x2B;传奇

如何计算或设置gnuplot边距的大小+;标签&x2B;传奇,gnuplot,Gnuplot,我们有一个需要像素完美的大型光谱图(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

我们有一个需要像素完美的大型光谱图(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
绘图将是我指定的精确尺寸(即: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

如果你知道你想要的图的确切大小,它会帮助你很多。如果需要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 ...
我发现做一些基本代数和使用
*margin
命令在处理像素完美的打印形状时非常有用(示例和示例)


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

这与我要查找的非常接近,但是我需要计算边距宽度。我知道我希望绘图为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 ...