Gnuplot自定义图例有两种不同的规格

cra*_*egs 2 gnuplot legend

我想要一个与每个绘制线无关的gnuplot中的键,而是代表每一行的规格.

基本上我想要的是键中的三条彩色线代表我正在使用的三种算法.然后用三种形状来表示每种算法的误差界限.

所以我的密钥看起来像这样:

红线 - alg 1

蓝线 - alg 2

绿线 - alg 3

三角形 - 5%

圈 - 3%

平方 - 1%

我的图表中有9行是颜色和形状的组合,但我不希望我的图例有所有9行,只是代表性的规格.

我希望这是有道理的.如果您需要更多说明,请与我们联系.

我没有找到很多资源来制作一个独立于我的绘制线的关键,所以我只得到为每一行设置'notitle'.

当前图表

e0k*_*e0k 5

实现这一目标的一种简单方法是在没有键的情况下绘制数据("键"是您所谓的"图例"的gnuplot术语),然后创建一个没有数据的键.这样,无论绘制的数据系列的数量和样式如何,密钥都可以包含您想要的任何内容.我称之为"假密钥",因为它是一个密钥,但它故意具有欺骗性,因为它不是直接从可见数据系列中生成的.

使用"假密钥"绘图

首先,绘制您的数据并(就像您推测的那样)使用notitle关键字,以便此数据不会显示在密钥中.然后,使用NaN(不是数字)作为数据绘制任何内容.您可以根据需要对其进行标题,指定点类型,线条样式等.由于它们有一个title,它们会出现在你给定标题的密钥中,而实际数据(有notitle)却没有.

例如,我使用您的密钥规范绘制了一个图,但绘制了我自己的线条:

使用假密钥绘图

set terminal pngcairo size 640,480 enhanced
set output "example.png"
set title "Plot with a False Key"

# Some line styles
set style line 1 lc rgb "red" lt 1
set style line 2 lc rgb "blue" lt 1
set style line 3 lc rgb "green" lt 1

# Some dummy things to plot
set xrange [-4*pi:4*pi]
set yrange [-0.3:1.1]
f1(x) = exp(-x**2/2)
f2(x) = sin(x)/x
f3(x) = 0.5*sin(2*x)/x

# First plot data with 'notitle', then make a false key with NaN
plot f1(x) ls 1 notitle, f2(x) ls 2 notitle, f3(x) ls 3 notitle, \
     NaN ls 1 title "Alg. 1", NaN ls 2 title "Alg. 2", NaN ls 3 title "Alg. 3", \
     NaN with points pt 9 lc rgb "black" title "5% error", \
     NaN with points pt 7 lc rgb "black" title "3% error", \
     NaN with points pt 5 lc rgb "black" title "1% error"
Run Code Online (Sandbox Code Playgroud)

注意我是如何事先预定义线条样式的.这是为了帮助保持绘制的数据(例如f1(x) ls 1 notitle)与密钥中的内容(例如NaN ls 1 title "Alg. 1")保持同步.这样,线型规范仅在代码中出现一次.要更改它,您只需在一个地方更改它.

还要注意如何绘制with points和使用键中的虚拟点形状lc rgb "black".将它们设为黑色表示它们与算法线的红色/绿色/蓝色无关.这是为了向观察者建议形状表示与颜色不同的参数.

建议线条样式的理智

您的示例图有九个数据系列.您可以尝试预先指定线条样式,例如:

# Colors and point types to use
alg1_color = "red"
alg2_color = "blue"
alg3_color = "green"
err5_pt = 9  # pt 9 = triangle
err3_pt = 7  # pt 7 = circle
err1_pt = 5  # pt 5 = square

# Algorithm 1 lines
set style line 1 lc rgb alg1_color lt 1 pt err5_pt
set style line 2 lc rgb alg1_color lt 1 pt err3_pt
set style line 3 lc rgb alg1_color lt 1 pt err1_pt

# Algorthm 2 lines
set style line 4 lc rgb alg2_color lt 1 pt err5_pt
set style line 5 lc rgb alg2_color lt 1 pt err3_pt
set style line 6 lc rgb alg2_color lt 1 pt err1_pt

# Algorthm 3 lines
set style line 7 lc rgb alg3_color lt 1 pt err5_pt
set style line 8 lc rgb alg3_color lt 1 pt err3_pt
set style line 9 lc rgb alg3_color lt 1 pt err1_pt
Run Code Online (Sandbox Code Playgroud)

绘制数据时,只需使用ls 4Alg.2(5%),ls 9Alg.3(1%)等.由于您的颜色和点类型仅在一个地方定义,因此更容易更改并保持一致.

另一个建议:如果有人试图打印你的情节,当用黑白打印时很难区分红色,绿色和蓝色.如果对不同的算法类型使用不同的线型(虚线,点线等),即使在B&W中打印,也会出现这种区别.为此,请使用不同的线型而不是lt 1不同的算法.