2011-06-23 74 views
35

Tôi muốn có một số nhãn xếp chồng lên nhau trên biểu đồ geom_bar. Dưới đây là một ví dụ:Cách đặt nhãn trên geom_bar trong R bằng ggplot2

df <- data.frame(x=factor(c(TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE))) 
ggplot(df) + geom_bar(aes(x,fill=x)) + opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(),axis.title.x=theme_blank(),legend.title=theme_blank(),axis.title.y=theme_blank()) 

Bây giờ

bảng (df $ x)

FALSE TRUE 
    3  5 

Tôi muốn có 3 và 5 trên đầu trang của hai thanh. Thậm chí tốt hơn nếu tôi có thể có giá trị phần trăm. Ví dụ. 3 (37.5%)5 (62.5%). Giống như vậy:

Điều này có khả thi không? Nếu vậy, làm thế nào?

+2

Thêm số hoặc văn bản ở đầu các thanh làm sai lệch cách mắt nhìn thấy so sánh ở độ cao. Xem [thảo luận này] (http://tolstoy.newcastle.edu.au/R/e2/help/07/08/22858.html) về R-help. –

Trả lời

28

Như với nhiều nhiệm vụ trong ggplot, chiến lược chung là đặt những gì bạn muốn thêm vào ô vào khung dữ liệu theo cách sao cho các biến khớp với các biến và tính thẩm mỹ trong cốt truyện của bạn. Vì vậy, ví dụ, bạn muốn tạo ra một khung dữ liệu mới như thế này:

dfTab <- as.data.frame(table(df)) 
colnames(dfTab)[1] <- "x" 
dfTab$lab <- as.character(100 * dfTab$Freq/sum(dfTab$Freq)) 

Vì vậy mà biến x phù hợp với biến tương ứng trong df, và vân vân. Sau đó, bạn chỉ đơn giản bao gồm nó sử dụng geom_text:

ggplot(df) + geom_bar(aes(x,fill=x)) + 
    geom_text(data=dfTab,aes(x=x,y=Freq,label=lab),vjust=0) + 
    opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(), 
     axis.title.x=theme_blank(),legend.title=theme_blank(), 
     axis.title.y=theme_blank()) 

Ví dụ này sẽ vẽ chỉ là tỷ lệ phần trăm, nhưng bạn có thể paste cùng nhau đếm cũng qua một cái gì đó như thế này:

dfTab$lab <- paste(dfTab$Freq,paste("(",dfTab$lab,"%)",sep=""),sep=" ") 

Lưu ý rằng trong phiên bản hiện tại của ggplot2, opts không được dùng nữa, vì vậy chúng tôi sẽ sử dụng themeelement_blank ngay bây giờ.

36

Để vẽ văn bản trên ggplot bạn sử dụng geom_text. Nhưng tôi thấy nó hữu ích để tóm tắt các dữ liệu đầu tiên sử dụng ddply

dfl <- ddply(df, .(x), summarize, y=length(x)) 
str(dfl) 

Kể từ khi dữ liệu là pre-tóm tắt, bạn cần phải nhớ để thay đổi thêm stat="identity" tham số để geom_bar:

ggplot(dfl, aes(x, y=y, fill=x)) + geom_bar(stat="identity") + 
    geom_text(aes(label=y), vjust=0) + 
    opts(axis.text.x=theme_blank(), 
     axis.ticks=theme_blank(), 
     axis.title.x=theme_blank(), 
     legend.title=theme_blank(), 
     axis.title.y=theme_blank() 
) 

enter image description here

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