Gnuplot 中是否可以具有与分辨率无关的元素大小?

问题描述 投票:0回答:2

那么,是否可以使 Gnuplot 输出,例如无论我使用什么绘图大小和渲染设备分辨率,标签中的线条都是 1 点粗还是 24 点大小的字符?

现在在我看来,Gnuplot 不会“开箱即用”地做到这一点。一切都以像素为单位,对吧,即使渲染到 Postscript 终端也是如此?

我正在处理一组绘图图像,并非所有最终(渲染)公制尺寸都是预先知道的。缩放到不同的几何形状后,线宽看起来明显不同且不整齐。与符号和字形相同。

此外,在光栅 gnuplot 终端和 Postscript 终端中预览时,很难预测绘图的外观。

我想可以在图中插入一些代码,以根据绘图大小和所需的元素大小自动计算像素大小,这会起作用,但这是唯一的选择吗?

gnuplot font-size
2个回答
0
投票

你的前提是不正确的。一些输出模式(终端)是基于像素的;其他人则不然。 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。


0
投票

我现在没有太多时间进行更详细的阐述,所以我将在这里对我自己的问题提出一个中间的半答案,以造福于有相同问题的人。

要点是:它可能的,但方式非常不精确。您最好使用基于光栅的

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

© www.soinside.com 2019 - 2024. All rights reserved.