2013-01-16 47 views
13

Tôi có một dataframe a với ba cột:Màu một điểm và thêm chú thích vào ggplot2?

GeneName, Index1, Index2

tôi vẽ một phân tán như thế này

ggplot(a, aes(log10(Index1+1), Index2)) +geom_point(alpha=1/5) 

Sau đó, tôi muốn tô màu một điểm mà GeneName"G1" là và thêm một hộp văn bản gần điểm đó, cách dễ nhất để làm điều đó là gì?

Trả lời

17

Điều gì đó như thế này sẽ hoạt động. Bạn có thể cần phải gây rối với các đối số xy đến geom_text().

library(ggplot2) 

highlight.gene <- "G1" 

set.seed(23456) 
a <- data.frame(GeneName = paste("G", 1:10, sep = ""), 
        Index1 = runif(10, 100, 200), 
        Index2 = runif(10, 100, 150)) 

a$highlight <- ifelse(a$GeneName == highlight.gene, "highlight", "normal") 
textdf <- a[a$GeneName == highlight.gene, ] 
mycolours <- c("highlight" = "red", "normal" = "grey50") 

a 
textdf 

ggplot(data = a, aes(x = Index1, y = Index2)) + 
    geom_point(size = 3, aes(colour = highlight)) + 
    scale_color_manual("Status", values = mycolours) + 
    geom_text(data = textdf, aes(x = Index1 * 1.05, y = Index2, label = "my label")) + 
    theme(legend.position = "none") + 
    theme() 

screenshot

+1

@Arun Vâng, chắc chắn bạn có thể và cho một ví dụ thực sự tối thiểu mà có thể đã đủ. Tôi muốn sử dụng khung dữ liệu vì có thể dễ dàng mở rộng được với nhiều nhãn (ví dụ: các điểm G1 và G7). Nhưng thật tốt khi được nhắc nhở về 'chú thích'. – SlowLearner

37

Bạn có thể tạo một tập hợp con chứa đúng chỗ đó và sau đó thêm nó vào cốt truyện:

# create the subset 
g1 <- subset(a, GeneName == "G1") 

# plot the data 
ggplot(a, aes(log10(Index1+1), Index2)) + geom_point(alpha=1/5) + # this is the base plot 
    geom_point(data=g1, colour="red") + # this adds a red point 
    geom_text(data=g1, label="G1", vjust=1) # this adds a label for the red point 

Chú ý: Vì tất cả mọi người giữ up-biểu quyết câu hỏi này, tôi nghĩ tôi sẽ làm cho nó dễ dàng hơn để đọc.

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