2013-11-27 20 views
6

Tôi có một tập tin với 3 cột, 2 đầu tiên là vị trí xy và một trong những thứ 3 tôi sử dụng nó cho xác định màu sắc vì vậy tôi có một cái gì đó như thế này:Tuỳ huyền thoại (hoặc văn bản) gnuplot

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 

Bây giờ câu hỏi: Có thể có một huyền thoại phù hợp với loại điểm và màu sắc này không ?. Vì các điểm sẽ có các màu khác nhau (theo pallete), tôi muốn chỉ định ý nghĩa của từng màu trong chú giải.

Giải pháp duy nhất tôi nghĩ là viết một số văn bản với ký tự của điểm (trong trường hợp này là pt 14) và chỉ định màu ... nhưng thực sự không phải là giải pháp đúng không?

Vì vậy, hãy trợ giúp!

+0

Thông thường, hộp màu 'mà bạn chưa đặt, có nghĩa là cho điều này. – Christoph

+0

ý của bạn là gì? Tôi không phải là một chuyên gia ở tất cả =) – Nikko

+0

Xóa phần 'unset colorbox' khỏi tập lệnh của bạn và bạn sẽ có giá trị hiệp hội là <-> màu. Hay bạn chỉ có một vài giá trị màu và mỗi màu có ý nghĩa riêng biệt? – Christoph

Trả lời

6

Không có tùy chọn cho điều này, bạn cần phải fiddle một chút. Đây là YAGH (Tuy nhiên, một hack gnuplot khác);)

Giả sử rằng giá trị của bạn được đặt cách đều nhau, bạn có thể sử dụng tên tệp đặc biệt '+' với kiểu labels.

Để chỉ hiển thị phím tùy chỉnh, hãy xem xét ví dụ sau:

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 '' 

Điều này cho phép (với 4.6.4):

enter image description here

Khi set samples không ảnh hưởng đến dữ liệu các ô, bạn có thể tích hợp trực tiếp lệnh này vào lệnh cốt truyện của mình:

... 
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 

Nhưng bạn cần phải đặt xrange, yrange thích hợp và các giá trị của key_x, key_ykey_dy.

Đây không phải là cách trực quan nhất, nhưng nó hoạt động :)

+0

Cảm ơn bạn, rất hữu ích. Tôi đã điều chỉnh nó một chút để năng động hơn trong việc mở rộng trục: key_x = x_range - x_range/10.0 v.v. –

1

Tôi có một giải pháp thay thế được đăng ở đây: Using Gnuplot to plot point colors conditionally

Về cơ bản bạn vẽ một lần mà không có một entry huyền thoại, sau đó làm cho âm mưu giả (với không có dữ liệu) cho mỗi điểm màu/nhãn.

+0

Có, kết hợp với lặp lại và 'lc palette frac' nó sẽ hoạt động tốt:' labels = " ABCD"; âm mưu 'tập tin' u 2: 1: 3 wp pt 14 ps 2 bảng, cho [i = 1: 4] '' u (NaN): (NaN) wp pt 14 ps 2 lc bảng màu frac (i/3.0) từ tiêu đề (i) '. – Christoph

Các vấn đề liên quan