那么,是否可以使 Gnuplot 输出,例如无论我使用什么绘图大小和渲染设备分辨率,标签中的线条都是 1 点粗还是 24 点大小的字符?
现在在我看来,Gnuplot 不会“开箱即用”地做到这一点。一切都以像素为单位,对吧,即使渲染到 Postscript 终端也是如此?
我正在处理一组绘图图像,并非所有最终(渲染)公制尺寸都是预先知道的。缩放到不同的几何形状后,线宽看起来明显不同且不整齐。与符号和字形相同。
此外,在光栅 gnuplot 终端和 Postscript 终端中预览时,很难预测绘图的外观。
我想可以在图中插入一些代码,以根据绘图大小和所需的元素大小自动计算像素大小,这会起作用,但这是唯一的选择吗?
你的前提是不正确的。一些输出模式(终端)是基于像素的;其他人则不然。 Gnuplot 以“点”为单位将线宽和字体大小传递给 PostScript。如果要将输出放大到截然不同的尺寸(例如海报),那么您可能需要使用可选的终端关键字相应地缩放图形元素和文本。
例如,假设您首先在标准信纸尺寸的纸张上准备并预览图形。横向模式下的默认 PostScript 输出为 10 英寸 x 7 英寸
set term postscript landscape font "Times,12"
set output 'draft.ps'
load "my_complicated_plot.gp"
现在您想将其放大到海报尺寸,但您希望图形元素和文本按比例放大。您无需更改属于绘图描述的任何命令,而是修改终端设置:
set term postscript landscape font "Times,12" size 20in, 14in \
linewidth 2.0 pointscale 2.0 fontscale 2.0
set output 'bigger.ps'
load "my_complicated_plot.gp"
bigger.ps
输出文件将使用24pt Times的真实字体大小;最初由 plot foo with lines linewidth 3
绘制的线条的真实最终粗细为 6pt。
我现在没有太多时间进行更详细的阐述,所以我将在这里对我自己的问题提出一个中间的半答案,以造福于有相同问题的人。
要点是:它是可能的,但方式非常不精确。您最好使用基于光栅的
pngcairo
终端,并附加一些自我施加的使用限制。
这是我使用过的两个小文件,第一个是直接输入gnuplot(90值是我的屏幕dpi,因为我无法使用打印机设置测试环境,并结束了所有测试屏幕上):
not72 = 72.0/90.0 ;
_1mm = 72.0/25.4 ; _1pt = 25.4/72.0 ;
set output ARG0 . '_pngcairo.png'
set term pngcairo \
enhanced font "NimbusRoman,24" size 5*90,5*90 \
linewidth 1.0 dashlength 1.0 pointscale 1.0 fontscale 1.0
load "drawing.gp"
set output ARG0 . '_pngcairo_scaled.png'
set term pngcairo \
enhanced font "NimbusRoman,24" size 5*90,5*90 \
linewidth 1.0/not72 dashlength 1.0/not72 pointscale 1.0/not72 fontscale 1.0/not72
replot
set output ARG0 . '_pdfcairo.pdf'
set term pdfcairo \
enhanced font "Nimbus Roman,24" size 5in,5in \
linewidth 1.0 dashlength 1.0 pointscale 1.0 fontscale 1.0
replot
set output ARG0 . '_epscairo.ps'
set term epscairo \
enhanced font "Nimbus Roman,24" size 5in,5in \
linewidth 1.0 dashlength 1.0 pointscale 1.0 fontscale 1.0
replot
drawing.gp
文件如下:
unset key
set lmargin 0
set rmargin 0
set tmargin 0
set bmargin 0
set label "1in\nLF" at 0,5 font ",72"
function $dimline(x1,y1,x2,y2) << EOF
set arrow from first x1,y1 to x2,y2 lw _1mm
set arrow from first x2,y2 to x1,y1 lw _1mm
EOF
tmp = $dimline( 4.5,0, 4.5,9.9)
set label "5in long" at 5.15,2 rotate by 90
tmp = $dimline( 0,6, 9.9,6)
set label "1mm thick" at 2,6.35
plot [0:10][0:10] \
8 with lines ls 1 lw _1mm*50 \
, 2 with points pt 12 ps 10
对 Gnuplot 源代码的粗略浏览表明,那里有很多与大小和缩放相关的临时内容。我现在无法深入研究这一切。
因此,概括地说,要使用可缩放尺寸,您应该使用光栅类型终端自行完成所有缩放,例如
pngcairo
。
使用的 Gnuplot 版本是
Version 6.0 patchlevel 0 last modified 2023-12-09
。