gnuplot图例中的线条加粗

8
我使用 gnuplot 绘制了一些数据曲线,看起来像这样:

细线图

然而,图例中的线样本太细了。当你有更多的曲线时,颜色变得难以区分。你可以通过在绘图命令中添加 "lw 3" 来增加曲线的粗细,例如,你可以得到以下结果:

粗线图

但是,这会使线条的粗细所有地方都增加。是否可能只在图例中使线条变粗?我知道可以通过后处理输出 .png 文件来实现 "另一种方式",但是否有一种直接的方法,使用一些 gnuplot 设置/魔法来实现呢?
6个回答

7

很不幸,我不知道如何控制键中线条的粗细,因为它们对应于正在绘制的线条。您可以通过在gnuplot中输入help set key来查看可以更改的内容。

使用multiplot,您可以先绘制没有键的图形线,然后再为'ghost lines'重新绘制键。以下是可以实现此操作的代码示例:

set terminal png color size 800,600
set output 'plot.png'

set multiplot

unset key

plot '../batteries/9v/carrefour.txt' w lp, \
     '../batteries/9v/philips.txt' w lp, \
     '../batteries/9v/sony.txt' w lp

set key; unset tics; unset border; unset xlabel; unset ylabel

plot [][0:1] 2 title 'Carrefour' lw 4, \
     2 title 'Philips' lw 4, \
     2 title 'Sony' lw 4

在第二个绘图命令中,函数2(一个常数)被绘制在y轴范围为0到1的区间内,因此它不会显示出来。

哇,这真是天才 :) 我从没想过那个! 我不得不重新调整一下,因为我的 gnuplot 不接受三次指定范围([] [0:1]),只能一次。此外,第二个图还必须取消 xlabel / ylabel。但除此之外,它完美地工作了!谢谢! - anrieff
感谢您的更正,我在发布之前没有正确地测试我的脚本 :) - andyras

5

我看到了这篇文章,得到了一个重要的想法。 提供的解决方案在多图模式下不起作用,因为第二个绘图命令会触发第二个图形,这很可能是不期望的。 作为一种解决方法,可以将原始数据设置为“notitle”,然后使用相同的线型和颜色以不同的粗细度绘制超出范围的数据,并设置所需的标题。我将我的当前示例留在此处。它还包括我声明的线型。所以我只需要使用相同的线型(ls)来获得相同的颜色,但在第二条线上更改粗细度。

     # for pngs
 set terminal pngcairo size 1600,600 font ',18' enhanced
 set output "pic_multi_kenngr_ana.png 

 set style line 2 lc rgb '#0ce90b' lt 1 lw 1.5 # --- green
 set style line 3 lc rgb '#09e0b3' lt 1 lw 1.5 #      .
 set style line 4 lc rgb '#065fd8' lt 1 lw 1.5 #      .
 set style line 5 lc rgb '#4e04cf' lt 1 lw 1.5 #      .
 set style line 6 lc rgb '#c702a9' lt 1 lw 1.5 #      .
 set style line 7 lc rgb '#bf000a' lt 1 lw 1.5 # --- red

 set multiplot layout 1,2 
 set xtics rotate
 set tmargin 5


 set xtics 12
 set grid xtics

 # set axis labels
set ylabel 'T [K]'
set xlabel 'Zeit [h]'

# select range
set xrange [0:48]
set yrange [290.15:306.15]

set title "(a) Bodentemperatur"
set key top right Right 

plot   'par_crank_hom01lvls.04.dat' u 1:3 with lines ls 7 notitle,\
       'par_crank_str01lvls.16.dat' u 1:3 with lines ls 2 notitle,\
       500  t 'z = 4 cm' ls 7 lw 4,\
       500  t 'z = 16 cm' ls 2 lw 4


################################################

set title "(b) Bodenwärmestrom an der Oberfläche"
set ylabel 'G [W m^{-2}]'
set yrange[-110:110]
unset key

plot 'par_crank_str01_ghf.dat' u 1:3 with lines


unset multiplot

我希望这能帮助到一些人。

1
一个更加简单的解决方法(在我看来)是明确定义颜色并将每条线绘制两次,一次使用高lw绘制关键字和标题以出现在关键字中,但添加“every ::0::0”,这实际上最终不会绘制任何内容,另一次按正常方式绘制。请参见以下代码片段:
plot data              u 0:1 w l linecolor rgb #1b9e77 lw 2 t "",\
     data every ::0::0 u 0:1 w l linecolor rgb #1b9e77 lw 4 t "Title"

在我的情况下,我只是绘制了“NaN”,这很好地解决了问题。 - Svalorzen

1
为了进一步解释@Svalorzen关于NaN的评论,以下内容将从一个名为datafile.txt的数据文件中绘制两条宽度为1的线条,不包含标题,并创建匹配的空白行,用于仅包含键的指定标题和宽度为5。
plot [][]\
    NaN title "Title1" w line lt 1 lc 1 lw 5,\
    NaN title "Title2" w line lt 1 lc 2 lw 5,\
    "datafile.txt" using 1:2 title "" w line lt 1 lc 1 lw 1,\
    "datafile.txt" using 1:3 title "" w line lt 1 lc 2 lw 1

0
尝试像这样做一些东西:
plot # ... \
    keyentry w l lw 1 lc 2 t "Title" # ...

并删除旧的密钥。


0
我找到了一个答案:设置键linewidth 在你的情况下,应该是这样的:
plot '../batteries/9v/carrefour.txt' w l lw 1 linetype 1 notitle, 0/0 linetype 1 linewidth 5 title 'Carrefour' 
rep '../batteries/9v/philips.txt' w l lw 1 linetype 2 notitle, 0/0 linetype 2 linewidth 5 title 'Philips' 
rep '../batteries/9v/sony.txt' w l lw 1, linetype 3 notitle, 0/0 linetype 3 linewidth 5 title 'Sony' 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接