我想用子图显示两个带有几何点的条形图 . 我的代码 -
df_1 <- iris[,c("Species", "Petal.Length","Petal.Width")]
df_2 <- iris[,c("Species", "Sepal.Length","Sepal.Width")]
df_1["Condition_1"] <- "P condition"
df_1[10:20,"Condition_1"] <- "Q condition"
df_1[20:30,"Condition_1"] <- "R condition"
df_1[30:40,"Condition_1"] <- "S condition"
df_1[40:50,"Condition_1"] <- "T condition"
df_1[60:70,"Condition_1"] <- "Q condition"
df_1[70:80,"Condition_1"] <- "R condition"
df_1[80:90,"Condition_1"] <- "S condition"
df_1[90:100,"Condition_1"] <- "T condition"
df_1[110:120,"Condition_1"] <- "Q condition"
df_1[120:130,"Condition_1"] <- "R condition"
df_1[130:140,"Condition_1"] <- "S condition"
df_1[140:150,"Condition_1"] <- "T condition"
df_2["Condition_2"] <- "P condition"
df_2[10:20,"Condition_2"] <- "Q condition"
df_2[20:30,"Condition_2"] <- "R condition"
df_2[30:40,"Condition_2"] <- "S condition"
df_2[40:50,"Condition_2"] <- "T condition"
df_2[60:70,"Condition_2"] <- "Q condition"
df_2[70:80,"Condition_2"] <- "R condition"
df_2[80:90,"Condition_2"] <- "S condition"
df_2[90:100,"Condition_2"] <- "T condition"
df_2[110:120,"Condition_2"] <- "Q condition"
df_2[120:130,"Condition_2"] <- "R condition"
df_2[130:140,"Condition_2"] <- "S condition"
df_2[140:150,"Condition_2"] <- "T condition"
Condition_1 <- as.vector(unique(df_1$Condition))
Species_1 <- unique(df_1$Species)
mean_df_delta <- setNames(data.frame(matrix(ncol = 4, nrow = 0)), c("Species", "Condition", "Petal.Length", "Petal.Width"))
for(Species_name in Species_1){
mean_df_1 <- aggregate(.~Condition_1,data=df_1,function(x) c(M = mean(x)))
mean_df_1["Species"] <- Species_name
num <- assign(paste("sam_df", as.character(Species_name), sep = "_"), mean_df_1)
mean_df_delta <- rbind(mean_df_delta,num)
}
mean_df_normalized <- setNames(data.frame(matrix(ncol = 4, nrow = 0)), c("Species", "Condition", "Sepal.Length", "Sepal.Width"))
Species_2 <- unique(df_2$Species)
Condition_2 <- as.vector(unique(df_2$Condition))
for(Species_name in Species_2){
mean_df_2 <- aggregate(.~Condition_2,data=df_2,function(x) c(M = mean(x)))
mean_df_2["Species"] <- Species_name
num <- assign(paste("sam_df", as.character(Species_name), sep = "_"), mean_df_2)
mean_df_normalized <- rbind(mean_df_normalized,num)
}
delta_ct_plot <- ggplotly(ggplot(mean_df_delta, aes(fill=Condition_1, y=Petal.Length, x=Species)) + geom_bar(position=position_dodge(width=0.9), stat="identity") +
geom_errorbar(aes(ymax=Petal.Length+Petal.Width, ymin=Petal.Length-Petal.Width) , position=position_dodge(width=0.9), width=0.25) +
geom_point(data=df_1,
aes(Species,Petal.Length,color=Condition_1),position=position_dodge(width=0.9),
colour = "black")+theme(legend.title=element_blank()))
normalized_bar_plot <- ggplotly(ggplot(mean_df_normalized, aes(fill=Condition_2, y=Sepal.Length, x=Species)) + geom_bar(position=position_dodge(width=0.9), stat="identity") +
geom_errorbar(aes(ymax=Sepal.Length+Sepal.Width, ymin=Sepal.Length-Sepal.Width) , position=position_dodge(width=0.9), width=0.25) +
geom_point(data=df_2,
aes(Species,Sepal.Length,color=Condition_2),position=position_dodge(width=0.9),
colour = "black")+theme(legend.title=element_blank()))
subplot(delta_ct_plot, normalized_bar_plot)
现在 mean_df_delta
和 mean_df_normalized
是条形图和错误栏的数据框 . df_1
和 df_2
是geom points的数据框 .
现在在上面的图像传说正在重复 . 我只想要传奇1次 . 而且我希望所有的geom点都是黑色的 . 条形颜色不应该填充geom点 .
我已经看过这个answer . 但是这并不适用于我的情况,因为我有不同的数据帧和bar和geom点 .
1 回答
似乎
ggplotly
正在渲染每个子图中的每个组标签 . 请改用facet_wrap()
来仅生成一组标签 . 为此,我已将您所做的循环更改为完全"tidy"方法 .我还必须注意,按条件平均只对我没有意义 . 但我认为你只需要适应你的用例 .