2012-11-12 41 views
10

Tôi là người mới đến R, vì vậy xin hãy tha thứ cho sự thiếu hiểu biết của tôi. Tôi đã thực hiện một barplot xếp chồng giả, trong đó tôi đã vẽ 4 bộ thanh trên đầu trang của nhau bằng cách sử dụng geom_bar. Có 4 loại trạng thái sức khỏe (sống, chết, nhiễm bệnh, & đã chết) cho ba loài cây sồi (QUAG, QUKE, QUCH).Thêm chú thích vào "geom_bar" bằng gói ggplot2

Mã của tôi là như sau:


x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"), alive = c(627,208,109), infected = c(102,27,0), dead = c(133,112,12), sod.dead=c(49,8,0))) 

x.plot = ggplot(x, aes(variable, alive)) + geom_bar(fill="gray85") + 
    geom_bar(aes(variable,dead), fill="gray65") + 
    geom_bar(aes(variable, infected), fill="gray38") + 
    geom_bar(aes(variable, sod.dead), fill="black")+ 
    opts(panel.background = theme_rect(fill='gray100')) 
x.plot 

Bây giờ tôi muốn thực hiện một truyền thuyết cho thấy có bóng mát của màu xám liên quan đến tình trạng cây, tức là, "gray65" là "cây chết ", vv Tôi đã cố gắng trong một giờ qua và không thể làm cho nó hoạt động được.

+3

+1 cho một ví dụ tái sản xuất ngắn gọn. – mnel

Trả lời

2

Bạn cần định hình lại dữ liệu của mình.

library(reshape) 
library(ggplot2) 

x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"), alive = c(627,208,109), infected = c(102,27,0), dead = c(133,112,12), sod.dead=c(49,8,0))) 

x <- melt(x) 
colnames(x) <- c("Type","Status","value") 

ggplot(x, aes(Type, value, fill=Status)) + geom_bar(position="stack") 
+0

Cảm ơn Brandon! –

8

Tôi thấy rằng @Brandon Bertelsen đã đăng câu trả lời tuyệt vời. Tôi muốn thêm một số mã địa chỉ các chi tiết bổ sung được đề cập trong bài đăng gốc:

  1. Sau khi bạn định hình lại dữ liệu và tình trạng sức khỏe bản đồ thành fill, ggplot sẽ tự động tạo chú giải.
  2. Tôi khuyên bạn nên sử dụng scale_fill_manual() để nhận được các màu xám chính xác được đề cập trong bài đăng gốc.
  3. theme_bw() là một chức năng hữu ích để nhanh chóng có được giao diện đen trắng cho cốt truyện của bạn.
  4. Thứ tự âm lượng của các mức/mức độ yếu tố có thể được kiểm soát bằng cách chỉ định thứ tự mong muốn với đối số levels của factor().
  5. Thanh chắn được khắc (thay vì xếp chồng lên nhau) có thể có một số lợi thế cho tập dữ liệu này.

library(reshape2) 
library(ggplot2) 

x <- as.data.frame(list(variable=c("QUAG", "QUKE", "QUCH"), 
         alive=c(627, 208, 109), infected=c(102, 27, 0), 
         dead=c(133, 112, 12), sod.dead=c(49, 8, 0))) 

# Put data into 'long form' with melt from the reshape2 package. 
dat = melt(x, id.var="variable", variable.name="status") 

head(dat) 
# variable status value 
# 1  QUAG alive 627 
# 2  QUKE alive 208 
# 3  QUCH alive 109 
# 4  QUAG infected 102 
# 5  QUKE infected 27 
# 6  QUCH infected  0 

# By manually specifying the levels in the factor, you can control 
# the stacking order of the associated fill colors. 
dat$status = factor(as.character(dat$status), 
        levels=c("sod.dead", "dead", "infected", "alive")) 

# Create a named character vector that relates factor levels to colors. 
grays = c(alive="gray85", dead="gray65", infected="gray38", sod.dead="black") 

plot_1 = ggplot(dat, aes(x=variable, y=value, fill=status)) + 
     theme_bw() + 
     geom_bar(position="stack") + 
     scale_fill_manual(values=grays) 

ggsave(plot=plot_1, filename="plot_1.png", height=5, width=5) 

enter image description here

# You may also want to try a dodged barplot. 
plot_2 = ggplot(dat, aes(x=variable, y=value, fill=status)) + 
     theme_bw() + 
     geom_bar(position="dodge") + 
     scale_fill_manual(values=grays) 

ggsave(plot=plot_2, filename="plot_2.png", height=4, width=5) 

enter image description here

+2

+1 để đi thêm dặm. –

+0

Cả hai cách tiếp cận đều hoạt động. Cảm ơn bạn rất nhiều! Tôi chỉ ra lệnh cho "ggplot2" cuốn sách vì vậy hy vọng tôi sẽ nhận được tốt như cả hai bạn. –

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