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

时间:2016-12-08 22:14:48

标签: gnuplot legend

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

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

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

红线 - alg 1

蓝线 - alg 2

绿线 - alg 3

三角形 - 5%

圈 - 3%

平方 - 1%

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

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

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

Current graph

1 个答案:

答案 0 :(得分:5)

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

使用"假密钥"

进行绘图

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

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

Plot with a False Key

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"

注意我是如何事先预定义线条样式的。这有助于使绘制的数据(例如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

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

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