2012-01-31 45 views
9

我想绘制分类结果并标记真实类。所以,基本上我需要的是为字符串列中的值为每个点分配一个颜色。gnuplot:在一列中绘制具有基于颜色的值的点

数据集是这样的:

5.1 3.5 1.4 0.2光圈,setosa

我结束了脚本以下解决方案(感谢在这里的答案:How to make points one color when a third column equals zero, and another color otherwise, in Gnuplot?

set palette model RGB defined (0 "red",1 "blue", 2 "green") 
plot 'iris.data' using 1:2:5 notitle with points pt 2 palette 

在原始数据集中我用数字替换了字符串标签,因为我不知道如何在gnuplot中使用字符串。有没有办法如何将字符串映射到颜色?

目前的输出是这样的: gnuplot coloring points

但是我不喜欢梯度调色板,因为它不会在这种情况下才有意义。我宁愿使用单一颜色和班级名称的普通传说。任何想法如何做到这一点?

+0

我有同样的问题。如果gnuplot调色板接受了字符串而不是整数,那将会很好。我不认为它确实如此。 – 2013-01-25 08:57:37

回答

5

一种方式,你可以做到这一点是通过使用awk

使用数据文件Data.csv

5.4452 4.6816 blue 
1.2079 9.4082 red 
7.4732 6.5507 red 
2.3329 8.2996 red 
3.4535 2.1937 green 
1.7909 2.5173 green 
2.5383 7.9700 blue 

与此脚本:

set pointsize 3 
plot "< awk '{if($3 == \"red\") print}' Data.csv" u 1:2 t "red" w p pt 2, \ 
    "< awk '{if($3 == \"green\") print}' Data.csv" u 1:2 t "green" w p pt 2, \ 
    "< awk '{if($3 == \"blue\") print}' Data.csv" u 1:2 t "blue" w p pt 2 

你得到这个情节:

enter image description here

什么awk并是简单地检查第三数据文件的参数并且仅打印该th e线,如果它有一些价值:像红色或蓝色。

你也可以用渐变去除调色板。

该脚本可以通过使用gnuplot iterations进一步改进。

+0

谢谢,我对gnuplot很新,语法对我来说很困惑。使用awk非常方便 – Tombart 2012-02-02 10:51:47

+0

@Tombart如果您对示例中使用的语法有任何具体问题,请告诉我,我将详细说明。 – Woltan 2012-02-02 10:57:54

+0

这里'$ 3'是第三列的值,但它没有指定什么是分隔符?它会被自动视为''? – damned 2013-10-23 08:50:47

2

一个调色板可以用来得到任何一点颜色(单个点)

plot file using 1:2:3 with points palette 

现在成立了一个调色板,为您提供所需的颜色刻度。您可以设置调色板来计算颜色,例如使用HSV颜色模型或查看gnuplot演示网站。

只是为了完整性,看看最后一个例子上gnuplot pm3d colors demo page

color bar with distinct colors in gnuplot

theta(x) = x<0 ? 0 : 1 
r(x) = 4*x*(1-theta(x-0.25)) 
g(x) = 0.5*theta(x-0.25)*(1-theta(x-0.5)) 
b(x) = x 
set palette model RGB functions r(gray),g(gray),b(gray) 
set title "set palette model RGB functions\n4*x*(1-theta(x-0.25)), 0.5*theta(x-0.25)*(1-theta(x-0.5)), x" 
splot f(x)enter code here