2012-01-31 38 views
9

Tôi muốn vẽ kết quả phân loại và đánh dấu các lớp thực. Vì vậy, về cơ bản những gì tôi cần là chỉ định một màu cho mỗi điểm dựa trên giá trị trong một cột chuỗi.gnuplot: vẽ điểm với các giá trị màu dựa trên một cột

bộ dữ liệu trông như thế này:

5,1 3,5 1,4 0,2 Iris-setosa

tôi đã kết thúc với kịch bản sau đây giải pháp (nhờ vào các câu trả lời ở đây: 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 

trong tập dữ liệu gốc Tôi đã thay thế nhãn chuỗi bằng số, vì tôi không biết cách làm việc với chuỗi trong gnuplot. Có cách nào để ánh xạ chuỗi thành màu?

Hiện nay đầu ra trông như thế này: gnuplot coloring points

Tuy nhiên tôi không thích những bảng Gradient bởi vì nó không có ý nghĩa trong trường hợp này. Tôi thích truyền thuyết bình thường với một màu duy nhất và tên của lớp. Có ý tưởng nào để làm việc này không?

+0

Tôi có cùng một câu hỏi. Nó sẽ là tuyệt vời nếu bảng gnuplot chấp nhận chuỗi thay vì chỉ số nguyên. Tôi không nghĩ vậy. –

Trả lời

5

Cách bạn có thể thực hiện điều đó bằng cách sử dụng awk.

Sử dụng một tệp dữ liệu 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 

và kịch bản này:

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 

bạn sẽ có được âm mưu này:

enter image description here

awk gì chỉ đơn giản là kiểm tra thứ ba tham số của tệp dữ liệu và chỉ in thứ e dòng nếu nó có một số giá trị: như màu đỏ hoặc màu xanh.

Bạn cũng sẽ loại bỏ bảng màu bằng gradient.

Tập lệnh có thể được cải thiện hơn nữa bằng cách sử dụng gnuplot iterations.

+0

cảm ơn, tôi khá mới với gnuplot và cú pháp khá khó hiểu với tôi.sử dụng awk là khá thuận tiện – Tombart

+0

@Tombart Nếu bạn có bất kỳ câu hỏi cụ thể về cú pháp tôi đã sử dụng trong ví dụ, hãy cho tôi biết và tôi sẽ xây dựng trên nó. – Woltan

+0

ở đây '$ 3' là giá trị của cột thứ ba nhưng nó không được chỉ định dấu phân tách là gì? nó sẽ được tự động lấy là ' '? – damned

2

Một bảng màu có thể được sử dụng để có được bất kỳ màu nào điểm (đối với điểm cá nhân)

plot file using 1:2:3 with points palette 

Bây giờ thiết lập một bảng cung cấp cho bạn những gam màu mong muốn. Bạn có thể thiết lập bảng màu để tính toán màu sắc ví dụ bằng cách sử dụng mô hình màu HSV hoặc xem trang web demo của gnuplot.

Chỉ cần cho đầy đủ, có một cái nhìn vào ví dụ cuối cùng trên 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 
Các vấn đề liên quan