1. ホーム
  2. r

[解決済み】Rで、Error: ggplot2 doesn't know how to handle of data of class numericに対処する。

2022-02-16 23:05:30

質問

Rは初めてで、プログラミングもしたことがないのですが...。

標準エラーバー付きのボックスチャートを作成しようとすると、タイトルにあるエラーメッセージが表示されます。

R Cookbookで見つけたスクリプトに少し手を加えたものを使用しました。

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"

解決方法は?

このエラーは、数値ベクトルを datageom_errorbar : GVW[1:64,3] . ggplot のみで動作します。 data.frame .

一般に、サブセットは ggplot の呼び出しがあります。標準エラーが4つの別々のオブジェクトに保存されているため、そうしているのでしょう。それらを元の data.frame を実行すれば、1回の呼び出しですべてをプロットできるようになります。

ここでは dplyr というソリューションを用いて、データを要約し、あらかじめ標準誤差を計算しておきます。

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()