ggplot 组间差异
ggplot differences between groups
我有一个 df,其中包含不同试验中的组,我想在 ggplot 中制作试验之间的增量条形图。很难让 ggplot 理解我想要一个 df 中的差异。此外,某些治疗方法未在第二次试验中出现,因此我只想将其计为 0(即增量 = 试验 1 - 0)。
set.seed(1)
df <- data.frame((matrix(nrow=175,ncol=4)))
colnames(df) <- c("group","trial","count","hour")
df$group <- rep(c("A","B","C","D","A","B","D"),each=25)
df$trial <- rep(c(rep(1,times=100),rep(2,times=75)))
df$count <- runif(175,0,50)
df$hour <- rep(1:25,times=7)
df2 <- aggregate(df[,3:4],list(df$group,df$trial),mean)
colnames(df2)[1:2] <- c("group","trial")
这就是我到达的地方。我已经为 (group*trial) 绘制了单独的条形图,但我不知道如何减去它们。我想要 x=group 和 y=delta(trial) 的图。
我试过这个:
ggplot(df2 %>% group_by(group) %>% delta=diff(count),
aes(x=group,y=delta)) + geom_bar()
从我遇到的类似帖子,但运气不好。
这应该可以解决问题:
ggplot(df2 %>% group_by(group) %>% summarise(delta=ifelse(nrow(.)>1,diff(count),0)),
aes(x=group,y=delta)) + geom_col()#geom_bar(stat="identity")
问题是,当只有一个输入值时,"diff" returns 不是值 0
而是长度为 0 的向量。另外,我建议不要使用 geom_bar
,而要使用 geom_col
。您应该考虑的另一件事是,差异结果取决于数据帧的顺序。因此我建议使用
ggplot(df2 %>% group_by(group) %>% summarise(delta_trial_1_trial_2=
ifelse(length(trial)>1,
count[trial==2]-count[trial==1],0)),
aes(x=group,y=delta_trial_1_trial_2)) + geom_col()
我有一个 df,其中包含不同试验中的组,我想在 ggplot 中制作试验之间的增量条形图。很难让 ggplot 理解我想要一个 df 中的差异。此外,某些治疗方法未在第二次试验中出现,因此我只想将其计为 0(即增量 = 试验 1 - 0)。
set.seed(1)
df <- data.frame((matrix(nrow=175,ncol=4)))
colnames(df) <- c("group","trial","count","hour")
df$group <- rep(c("A","B","C","D","A","B","D"),each=25)
df$trial <- rep(c(rep(1,times=100),rep(2,times=75)))
df$count <- runif(175,0,50)
df$hour <- rep(1:25,times=7)
df2 <- aggregate(df[,3:4],list(df$group,df$trial),mean)
colnames(df2)[1:2] <- c("group","trial")
这就是我到达的地方。我已经为 (group*trial) 绘制了单独的条形图,但我不知道如何减去它们。我想要 x=group 和 y=delta(trial) 的图。
我试过这个:
ggplot(df2 %>% group_by(group) %>% delta=diff(count),
aes(x=group,y=delta)) + geom_bar()
从我遇到的类似帖子,但运气不好。
这应该可以解决问题:
ggplot(df2 %>% group_by(group) %>% summarise(delta=ifelse(nrow(.)>1,diff(count),0)),
aes(x=group,y=delta)) + geom_col()#geom_bar(stat="identity")
问题是,当只有一个输入值时,"diff" returns 不是值 0
而是长度为 0 的向量。另外,我建议不要使用 geom_bar
,而要使用 geom_col
。您应该考虑的另一件事是,差异结果取决于数据帧的顺序。因此我建议使用
ggplot(df2 %>% group_by(group) %>% summarise(delta_trial_1_trial_2=
ifelse(length(trial)>1,
count[trial==2]-count[trial==1],0)),
aes(x=group,y=delta_trial_1_trial_2)) + geom_col()