我想要一个与每个绘制线无关的gnuplot中的一个键,而是代表每一行的规格。
基本上我想要的是键中的三条彩色线代表我正在使用的三种算法。然后用三种形状来表示每种算法的误差界限。
所以我的密钥看起来像这样:
红线 - alg 1
蓝线 - alg 2
绿线 - alg 3
三角形 - 5%
圈 - 3%
平方 - 1%
我的图表中有9行是颜色和形状的组合,但我不希望我的图例有所有9行,只是代表性的规格。
我希望这是有道理的。如果您需要更多说明,请与我们联系。
我没有找到很多资源来制作一个独立于绘制线条的键,所以我只能为每一行设置'notitle'。
答案 0 :(得分:5)
实现这一目标的一个简单方法是在没有键的情况下绘制数据("键"是你所谓的"图例"的gnuplot术语),然后制作一个键没有数据。这样,无论绘制的数据系列的数量和样式如何,密钥都可以包含您想要的任何内容。我将此称为“假钥匙”#34;因为它是一把钥匙,但它故意具有欺骗性,因为它不是直接从可见数据系列中生成的。
首先,绘制您的数据并(就像您推测的那样)使用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"
注意我是如何事先预定义线条样式的。这有助于使绘制的数据(例如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
。