2010-02-11 34 views
5

Tôi có hai vectơ có số lượng bằng nhau. Làm cách nào để vẽ vectơ đầu tiên trong khi sử dụng phần tử tương ứng trong vectơ thứ hai làm ký tự in? (Nền: Tôi đã sắp xếp cột đầu tiên và cột thứ hai giữ các chỉ mục ban đầu. Tôi muốn sử dụng các chỉ mục làm ký tự có thể in để tôi có thể xem các điểm dữ liệu nào là ngoại lệ, vì mỗi số đại diện cho một lần chạy dữ liệu).R - cách sử dụng nội dung của một vector làm biểu tượng trong ô?

> x 
$x 
[1] 25 29 30 34 38 572 700 733 870 879 899 934 982 1054 1135 1258 
[17] 1315 1491 1685 1700 2069 2131 2284 3498 3506 4467 4656 5633 6642 8348 

$ix 
[1] 23 3 18 30 13 8 4 14 11 17 12 29 9 15 19 16 7 1 20 2 6 28 21 10 5 22 24 26 
[29] 25 27 

vector đầu tiên là x $ x, vector thứ hai là x $ ix (kết quả gọi loại với index.return = TRUE)

Tôi đã thử cốt truyện (x $ x, pch = str (x $ ix)) nhưng điều đó xử lý x $ ix bằng số. Nếu đây là Python tôi sẽ làm một cái gì đó như strings = [str (x) cho x trong x $ ix]. nhưng đây là R và tôi đã quên hầu hết những gì tôi từng biết.

tôi thấy rằng bạn có thể làm as.character (x $ ix) để có được chuỗi,

> as.character(x$ix) 
[1] "23" "3" "18" "30" "13" "8" "4" "14" "11" "17" "12" "29" "9" "15" "19" "16" 
[17] "7" "1" "20" "2" "6" "28" "21" "10" "5" "22" "24" "26" "25" "27" 

và tôi có thể sử dụng như là đầu vào để pch. Nhưng chỉ có nhân vật đầu tiên được sử dụng (và theo các tài liệu, đó là bình thường).

Tôi biết có cách để thực hiện việc này; Tôi đã làm nó ở trường đại học. Nhưng tôi không thể cho cuộc sống của tôi nhớ làm thế nào tôi đã làm nó.

Chart không có nhãn: alt text http://i47.tinypic.com/2aep88.png

Chart với nhãn, nhưng không chính xác: alt text http://i50.tinypic.com/2cicxtu.png

Trả lời

9

này nên làm việc:

x = 1:4 
y = x 
plot(x, y, ann=F, axis=F, col="blue", pch=16) 
text(x, y, labels=c("1st", "2nd", "3rd", "4th"), col="red", pos=c(3,4,4,1), offset=0.6) 

Chỉ cần chuyển đổi của bạn vector phi dữ liệu (một trong chứa nhãn) cho một vector ký tự: nhãn = as.character (label_vector)

và sau đó thay thế điều này cho đối số thứ ba trong dòng 4 ở trên.

Chức năng 'Văn bản' khá linh hoạt do các đối số khác nhau mà bạn có thể chuyển vào - ví dụ: (như trong ví dụ trên), bạn có thể đặt văn bản thành màu khác với điểm dữ liệu của bạn bằng "col"; Bạn cũng có thể chỉ định vị trí (liên quan đến điểm dữ liệu được chú thích bởi nhãn văn bản đã cho) cho từng nhãn văn bản riêng biệt. Điều đó thường hữu ích để giữ cho các nhãn văn bản từ, ví dụ, chồng chéo một trong các trục, đó là những gì đã xảy ra lần đầu tiên tôi chạy ví dụ này mà không cần thiết lập 'pos'. Vì vậy, bằng cách đặt 'pos' (như c (3, 4, 4, 1)) tôi đặt vị trí của các nhãn văn bản là "ở trên", "phải", "phải" và "bên dưới" - di chuyển dữ liệu đầu tiên chỉ lên để nó không chạm vào trục x bên dưới và di chuyển thanh thứ tư xuống để nó không chạm vào trục x trên cùng. Ngoài ra, sử dụng 'offset' (có giá trị mặc định là 0,5), bạn có thể chỉ định độ lớn của điều chỉnh vị trí.

+0

Ahaaaa, tôi biết có một chức năng để vẽ các chuỗi. Cám ơn bạn đã phản ứng nhanh chóng của bạn. Tôi cũng không biết về lập luận pos - đó là cực kỳ hữu ích. Cảm ơn một lần nữa! – I82Much

+0

không có vấn đề - vui mừng khi biết bạn thấy nó hữu ích. – doug

3

Dưới đây là một cách để làm điều này bằng cách sử dụng ggplot2 gói:

library(ggplot2) 
x <- rnorm(10) 
y <- rnorm(10) 
labs <- 1:10 
ggplot()+geom_text(aes(x=x,y=y,label=labs)) 

enter image description here

0

Dưới đây là một giải pháp rất cơ bản sử dụng lattice:

dat <- data.frame(x = rnorm(10), y = rnorm(10), 
        labs = as.character(1:10)) 
xyplot(y~x,data = dat,panel = function(x,labs){ 
           panel.text(x,y,labels = labs)}, 
     labs = dat$labs) 

enter image description here

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