自定义图例(或文本)gnuplot

6

我有一个包含3列的文件,前两列是位置x和y,第三列定义了颜色,因此我的数据看起来像这样:

set palette model RGB defined ( 1 'black', 2 'blue', 3 'green', 4 'red')
unset colorbox

plot "file" u 2:1:3 w points pt 14 ps 2 palette, "file2" u 2:1:3 w points pt 14 ps 2        palette 

现在的问题是:能否用这种点和颜色来制作合适的图例呢?由于不同的点会有不同的颜色(根据调色板),因此我想在图例中说明每种颜色代表什么含义。
唯一想到的解决方案就是在图中某处编写一些文字,描述点的特征(在本例中为pt 14)并指定颜色……但这并不是一个真正的解决方案,对吧?
所以请帮忙!

通常情况下,你要取消的 colorbox 就是为此而设计的。 - Christoph
你是什么意思?我完全不是专家 =) - Nikko
从您的脚本中删除 unset colorbox 部分,您将得到一个关联值<->颜色。或者您只有少量颜色值,每种颜色都具有明确的含义? - Christoph
是的,我只有4个值,每个值都有一个颜色。不同的颜色代表不同的含义,我希望在图例中显示出来。但如果我添加标题“something”,它将具有正确的符号但没有颜色。 - Nikko
2个回答

6

没有这个选项,您需要稍微调整一下。这里有一个YAGH(另一个gnuplot hack);)

假设您的值是等间隔的,您可以使用带有标签绘图样式的'+'特殊文件名。

要仅显示自定义键,请考虑以下示例:

labels="first second third fourth"
set xrange[0:1] # must be set for '+'
set yrange[0:1]
set samples words(labels)   # number of colors to use
key_x = 0.8     # x-value of the points, must be given in units of the x-axis
key_y = 0.8
key_dy = 0.05
set palette model RGB defined ( 1 'black', 2 'blue', 3 'green', 4 'red')
unset colorbox
plot '+' using (key_x):(key_y + $0*key_dy):(word(labels, int($0+1))):0 \
    with labels left offset 1,-0.1 point pt 7 palette t ''

这是4.6.4版本的输出结果: enter image description here 由于“set samples”不影响数据图,因此您可以直接将其集成到绘图命令中:
...
unset key
plot "file" u 2:1:3 w points pt 14 ps 2 palette, \
     "file2" u 2:1:3 w points pt 14 ps 2 palette, \
     '+' using (key_x):(key_y - $0*key_dy):(word(labels, int($0+1))):0 \
         with labels left offset 1,-0.1 point pt 14 ps 2 palette

但是你需要设置适当的xrange、yrange和key_xkey_ykey_dy的值。

这不是最直观的方法,但它有效 :)


谢谢,非常有用。我稍微调整了一下,使其在缩放轴方面更具动态性: key_x = x_range - x_range / 10.0 等等... - Leo Ufimtsev

1
我在这里发布了一种替代方案: 使用Gnuplot有条件地绘制点颜色 基本上,您首先绘制一次不带图例条目的图,然后为每个点颜色/标签制作虚拟图(没有数据)。

是的,结合迭代和 lc palette frac 应该可以正常工作:labels="A B C D"; plot 'file' u 2:1:3 w p pt 14 ps 2 palette, for [i=1:4] '' u (NaN):(NaN) w p pt 14 ps 2 lc palette frac (i/3.0) title word(i) - Christoph

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