Gnuplot 与线宽无关的设定点大小

Gnuplot 与线宽无关的设定点大小,gnuplot,Gnuplot,我在gnuplot中定义了以下线条样式: set linetype 1 lc rgb "red" lw 3 pt 7 set linetype 3 lc rgb "red" lw 1 pt 7 看起来似乎这些点的部分大小来自线宽。我在循环线型循环的绘图中使用这些样式,对cspline和相应的点使用相同的样式,因此我看不到为点定义单独样式的简单方法 我得到的结果如下: 这些点对应于pointsize,但线型1中的点仍然稍大(可能来自较厚的边框) 这两种样式中的点是否可能大小相同 对于Migue

我在gnuplot中定义了以下线条样式:

set linetype 1 lc rgb "red" lw 3 pt 7
set linetype 3 lc rgb "red" lw 1 pt 7
看起来似乎这些点的部分大小来自线宽。我在
循环
线型循环
绘图中使用这些样式,对cspline和相应的点使用相同的样式,因此我看不到为点定义单独样式的简单方法

我得到的结果如下:

这些点对应于
pointsize
,但线型1中的点仍然稍大(可能来自较厚的边框)

这两种样式中的点是否可能大小相同

对于Miguel的评论,我的用例的一个更完整的例子是:

filenames = "A B C D"

set linetype 1 lc rgb "blue"        lw 3 pt 7
set linetype 2 lc rgb "red"         lw 3 pt 7
set linetype 3 lc rgb "blue"        lw 1 pt 7
set linetype 4 lc rgb "red"         lw 1 pt 7
set linetype cycle 4

plot for [file in filenames] file.".csv" \
     using 1:2
     title file \
     smooth csplines, \
     for [file in filenames] file.".csv" \
     u 1:2 with points notitle

线型5-8由循环设置,并由打印命令的最后一部分使用。欢迎就另一种方法提出建议

对于某些端子,填充点类型的大小取决于线宽,因为它们有边框。所有基于cairo的终端(pdfcairo、pngcairo、wxt和cairolatex)都是这种情况,而其他终端(如svg、postscript、qt)则不显示这种行为

作为测试用例考虑

set linetype 1 lc rgb "red" lw 3 pt 7
set linetype 3 lc rgb "red" lw 1 pt 7

set samples 11
set style function linespoints
plot x lt 1, x + 0.5 lt 3
考虑到您希望在图例中包含点采样,最好的选择是对于线宽较大的线型稍微减小点大小,如

set linetype 1 lc rgb "red" lw 3 pt 7 ps 0.9

缩放因子的选择必须手动确定。

对于您的特定情况,您可以设置更多样式,并通过
do For
循环自动执行(重用代码):

使用一些简单的数据文件:


事实上,点的边界取决于线宽。我认为最简单的方法是稍微减小线型1的点大小(尝试使用
ps0.9
)。这愚弄了我的眼睛-足够好了!我不明白为什么你不能独立绘制点和线-你能分享你代码的相关部分吗?如果使用变量选择样式,例如
i
,则可以使用例如
(i+100)
定义补充样式,并对线条使用
lt 1
,对点使用
lt 101
。@Miguel Yes,根据进一步的要求,这也可以起作用:不能使用带有linespoints示例的图例,也不能使用
线型循环。至于
linetype cycle
你也是对的,尽管它可以被绕过(或多或少是“丑陋的”)。我实际上不希望在图例中使用linespoints样式。这会改变答案吗?@Christoph谢谢你的测试,我上了一台带有pngcairo的机器,所以贴了一张图。我本来想避免生成更多的样式,但既然可以如此优雅地完成,为什么还要麻烦呢。感谢上帝给了三元运算符。
filenames = "A B C D"

do for [i=0:1] {
set linetype (4*i+1) lc rgb "blue"        lw (i == 1 ? 0 : 3) pt 7
set linetype (4*i+2) lc rgb "red"         lw (i == 1 ? 0 : 3) pt 7
set linetype (4*i+3) lc rgb "blue"        lw (i == 1 ? 0 : 1) pt 7
set linetype (4*i+4) lc rgb "red"         lw (i == 1 ? 0 : 1) pt 7
}
set linetype cycle 8

plot for [file in filenames] file.".csv" \
     using 1:2 \
     title file \
     smooth csplines, \
     for [file in filenames] file.".csv" \
     u 1:2 with points notitle