1

我有以下格式的数据:

x   y   value
1   1   3
1   2   3
1   3   3
2   1   4
2   2   4
2   3   4
3   1   5
3   2   6
3   3   7

在此示例中,值 3 和 4 在 3*3 网格中出现频率最高。目标是创建表面的图像,坐标的颜色取决于“值”。请记住,这只是一个示例,实际上我有一个大约 500*150 坐标的网格,其值范围大约为 1000。我目前绘制这样的图像:

plot "data.csv" u 1:2:3 with points pt 5 ps variable palette

问题是,给定示例,使用标准调色板,3 和 4 的颜色将相似。当不同值的数量增加时,情况会变得更糟。

我想要的是,频率最高的值的颜色彼此之间的差异最大。我想要这个,因为由于数据的性质,与其他数据相比,通常存在值接近且频率较高的值。所以给出这个例子,我希望 3 是蓝色的,4 是红色的。如果有更多的值不会像值 5、6 和 7 那样出现,我仍然希望 3 和 4 的颜色相差很大;再次喜欢蓝色和红色。关键是,由于它们的颜色,很容易区分高频值。

我认为上述内容很难做到,这可能是一个替代方案:作为替代方案,我想要一个低值的“快速”渐变,例如从值 1 到 10 的彩虹渐变,不包括蓝色。然后,例如,对于值 11-1000,我想要一个“慢”渐变到剩余颜色(在这个例子中是蓝色,或者可能是一些剩余颜色范围)。这在某种程度上也足够了,因为它意味着低值具有更多区分颜色,并且由于数据的性质,低值往往更频繁地出现。我想这是一个更简单的解决方案,所以如果您对此有解决方案但没有第一个解决方案,请提及。

提前致谢!

4

1 回答 1

1

这是一个可能的调色板作为起点:

set terminal postscript eps color
set output 'test.eps'
set palette defined (0 1 0 1, 1 1 0 0, 2 1 1 0, 3 0 1 0, 100 0 0 1) maxcolor 2**12
test palette
set output

这给出了结果: 在此处输入图像描述

我使用了postscript终端,因为大多数其他终端在使用调色板着色时仅支持 256 色。当然,你也可以lc rgb variable改用。然后最后一列被解释为 rgb 值的整数表示,但您必须自己指定完整的颜色函数,包括插值等。

于 2013-08-22T16:33:05.893 回答