2012-06-05 68 views
5

Tôi có một âm mưu mà tôi muốn vẽ một đường từ (0,0) đến (15,15), với chú thích. Làm thế nào để đạt được điều đó? Lô:đường kẻ ngang qua trong một ggplot2

frame <- read.table('pastie_from_web', sep=",", header=TRUE) 
colnames(frame) <- c("pos", "word.length") 
plot <- ggplot(frame, aes(x=pos, y=word.length)) + scale_x_continuous(limits=c(1,15)) + scale_y_continuous(limits=c(1,15))+ geom_density2d(aes(color=..level..)) + scale_color_gradient(low="black", high="red") + opts(legend.position="none") 
png(paste("graphs/", fname, ".png", sep=""), width=600, height=600) 
print(plot) 

dữ liệu: http://sprunge.us/gKiL hoặc

structure(list(position = c(2, 2, 2, 2, 7, 8, 4, 5, 4, 9, 5, 
2, 7, 9, 9, 6, 5, 6, 9, 2, 6, 5, 5, 7, 7, 5, 6, 5, 5, 3, 2, 4, 
5, 2, 3, 2, 7, 5, 2, 5, 2, 6, 8, 7, 2, 8, 5, 4, 2, 5, 2, 2, 2, 
6, 8, 2, 2, 9, 5, 2, 4, 7, 3, 4, 9, 5, 5, 5, 5, 4, 7, 2, 7, 2, 
4, 4, 3, 2, 5, 6, 5, 5, 5, 5, 4, 4, 8, 7, 5, 7, 4, 3, 4, 5, 2, 
6, 6, 4, 4, 2, 2, 3, 2, 2, 6, 2), word.length = c(5L, 5L, 6L, 
4L, 9L, 11L, 5L, 8L, 8L, 10L, 8L, 9L, 8L, 10L, 10L, 7L, 9L, 10L, 
11L, 10L, 10L, 8L, 13L, 11L, 11L, 13L, 7L, 9L, 6L, 4L, 9L, 8L, 
9L, 6L, 4L, 5L, 11L, 13L, 13L, 13L, 10L, 9L, 11L, 8L, 4L, 10L, 
8L, 16L, 3L, 5L, 4L, 12L, 12L, 15L, 9L, 12L, 12L, 11L, 11L, 8L, 
16L, 9L, 8L, 7L, 10L, 11L, 6L, 13L, 5L, 8L, 8L, 5L, 8L, 5L, 6L, 
6L, 7L, 10L, 13L, 7L, 6L, 13L, 9L, 6L, 7L, 8L, 11L, 8L, 8L, 8L, 
8L, 8L, 7L, 6L, 5L, 9L, 9L, 5L, 5L, 6L, 7L, 8L, 8L, 10L, 8L, 
10L)), .Names = c("position", "word.length"), class = "data.frame", row.names = c(NA, 
-106L)) 
+0

Vui lòng sử dụng 'dput (data)' và dán kết quả đó (hoặc một phần của nó 'dput (head (data))') thay vì đăng dữ liệu ở một nơi khác trên web. – Maiasaura

+2

có lẽ 'geom_segment (aes (x = 0, y = 0, xend = 15, yend = 15))'. Nó không rõ ràng những gì bạn đang hiển thị trong truyền thuyết mặc dù. – Chase

+0

Điều gì @Maiasaura đã nói hoặc nếu bạn không muốn 'dput()' ở đây, ít nhất hãy hiển thị mã được sử dụng để đọc tệp đó từ web để chúng tôi không phải tự tìm ra. –

Trả lời

5

Dưới đây là một ví dụ tập dữ liệu để minh họa:

set.seed(42) 
dat <- data.frame(x = runif(20, min = 0, max = 20), 
        y = runif(20, min = 0, max = 20)) 

p <- ggplot(dat, aes(x = x, y = y)) 
p + geom_point() + 
    geom_line(data = data.frame(x = c(0,15), y = c(0,15)), 
       aes = aes(x = x, y = y), colour = "red") 

Thông báo thế nào chúng ta có thể chỉ định khác nhau data lập luận để geoms, cho phép chúng tôi để vẽ các đối tượng dữ liệu khác nhau trên cùng một vùng ô được xác định trong lệnh gọi ggplot() gốc. Lưu ý: Nếu khung dữ liệu thứ hai (trong cuộc gọi geom_line()) có cùng ánh xạ trục x và y làm lô gốc, thì bạn không cần aes() mới như ban đầu tôi có mã (xem lịch sử sửa đổi của Câu trả lời)). Điều này có thể không rõ ràng và nhận xét từ @Justin đã nhắc tôi thay đổi số geom_line() để bao gồm cuộc gọi aes() mới để ánh xạ dữ liệu đến thẩm mỹ; nó không cần thiết trong ví dụ của tôi nhưng cũng có thể cần thiết trong việc sử dụng trong thế giới thực.

Trên đây đưa ra:

enter image description here

Nếu bạn muốn dòng tùy ý khác nhau, hãy xem xét geom_abline() để vẽ đường với Hãy cho dốc và đánh chặn. geom_segment() là một thay thế cho các bên trên geom_line() nơi bạn chỉ định tọa độ x và y bắt đầu và kết thúc. Xem các trang trợ giúp tương ứng cho các geom để xác định bạn thích sử dụng cái nào.

+0

Tôi đã thêm 'cốt truyện <- lô + geom_line (dữ liệu = dữ liệu.frame (x = c (0,15), y = c (0,15)), màu =" xanh lục ") vào tệp, cung cấp cho tôi 'Lỗi trong eval (expr, envir, enclos): đối tượng 'pos' không tìm thấy Cuộc gọi: lapply ... sapply -> lapply -> eval.quoted -> lapply -> FUN -> eval'. – Reactormonk

+2

bạn đã không cung cấp một 'aes (...)' mới cho 'geom_line' để cố gắng sử dụng giá trị được định nghĩa trong' ggplot' đầu tiên. Thay vào đó, thêm 'aes' thích hợp như trong câu trả lời của Gavin hoặc thay đổi tên của' geom_line' data.frame để khớp. – Justin

+0

+1 Điểm tốt @Justin Tôi không bao gồm một 'aes (...)' mới trong 'geom_line()' call * vì * ánh xạ biến 'x' tới trục x và' y' đến trục y vẫn giữ nguyên như 'ggplot()' ban đầu nhưng điều đó có thể không rõ ràng. Tôi sẽ thay đổi mã ở trên để phản ánh điều này. –

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