a

Câu hỏi Trong R, xử lý lỗi: ggplot2 không biết cách xử lý dữ liệu của lớp số


Tôi mới đến R và chưa thực hiện bất kỳ chương trình nào trước đây ...

Khi tôi cố tạo biểu đồ hộp với các thanh lỗi chuẩn, tôi nhận được thông báo lỗi được đề cập trong tiêu đề.

Tôi đã sử dụng một tập lệnh mà tôi tìm thấy trên R Cookbook mà tôi đã chỉnh sửa một chút:

ggplot(GVW, aes(x="variable",y="value",fill="Genotype")) + 
  geom_bar(position=position_dodge(),stat="identity",colour="black", size=.3)+
  geom_errorbar(data=GVW[1:64,3],aes(ymin=value-seSKO, ymax=value+seSKO), size=.3, width=.2, position=position_dodge(.9))+
  geom_errorbar(data=GVW[65:131,3],aes(ymin=value-seSWT, ymax=value+seSWT), size=.3, width=.2, position=position_dodge(.9))+
  geom_errorbar(data=GVW[132:195,3],aes(ymin=value-seEKO, ymax=value+seEKO), size=.3, width=.2, position=position_dodge(.9))+
  geom_errorbar(data=GVW[196:262,3],aes(ymin=value-seEWT, ymax=value+seEWT), size=.3, width=.2, position=position_dodge(.9))+
  xlab("Time")+
  ylab("Weight [g]")+
  scale_fill_hue(name="Genotype", breaks=c("KO", "WT"), labels=c("Knock-out", "Wild type"))+
  ggtitle("Effect of genotype on weight-gain")+
  scale_y_continuous(breaks=0:20*4) +
  theme_bw()

Data<- data.frame(
  Genotype<- sample(c("KO","WT"), 262, replace=T),
  variable<- sample(c("Start","End"), 262, replace=T),
  value<- runif(262,20,40)
)
names(Data)[1] <- "Genotype"
names(Data)[2] <- "variable"
names(Data)[3] <- "value"

17
2018-04-29 19:38


gốc




Các câu trả lời:


Lỗi xảy ra vì bạn đang cố gắng ánh xạ một vector số data trong geom_errorbar: GVW[1:64,3]. ggplot chỉ làm việc với data.frame.

Nói chung, bạn không nên đặt bên trong ggplot cuộc gọi. Bạn đang làm như vậy bởi vì các lỗi tiêu chuẩn của bạn được lưu trữ trong bốn đối tượng riêng biệt. Thêm chúng vào ảnh gốc của bạn data.frame và bạn sẽ có thể vẽ mọi thứ trong một cuộc gọi.

Ở đây với một dplyr giải pháp để tóm tắt dữ liệu và tính toán sai số chuẩn trước.

library(dplyr)
d <- GVW %>% group_by(Genotype,variable) %>%
    summarise(mean = mean(value),se = sd(value) / sqrt(n()))

ggplot(d, aes(x = variable, y = mean, fill = Genotype)) + 
  geom_bar(position = position_dodge(), stat = "identity", 
      colour="black", size=.3) +
  geom_errorbar(aes(ymin = mean - se, ymax = mean + se), 
      size=.3, width=.2, position=position_dodge(.9)) +
  xlab("Time") +
  ylab("Weight [g]") +
  scale_fill_hue(name = "Genotype", breaks = c("KO", "WT"), 
      labels = c("Knock-out", "Wild type")) +
  ggtitle("Effect of genotype on weight-gain") +
  scale_y_continuous(breaks = 0:20*4) +
  theme_bw()

19
2018-05-01 16:23



Cảm ơn bạn rất nhiều Scoa, dữ liệu được vẽ như dự định bây giờ. Mặc dù, một trong những cột knock-out bị thiếu nhưng tôi sẽ có thể giải quyết điều đó. - embacify