你可以使用下面的代码来绘制它: p>
ggplot(tdat,aes(x = interaction(Condition,variable,drop = TRUE,sep =' - '),y = value , fill = Condition))+ geom_point()+ scale_color_discrete(name ='interaction levels')+ stat_summary(fun.y ='mean',geom =' bar', aes(label = signif(.. y ..,4),x = as.integer(interaction(Condition,variable))))+ facet_grid(。〜variable)
但正如你所能看到它不会删除每个方面未使用的列,你知道为什么吗? 在剧情中显示,因为使用了所有级别。如果完全不使用它们,级别将被丢弃。要删除每个方面的级别,请将 scale =free_x添加到 facet_grid()。但是这在特定情况下不起作用,因为您在 ggplot()和<$ c中使用了 x $ c> stat_summary()调用。
tdat $ int< -with(tdat,interaction(Condition,variable)我会建议在绘制交互之前添加新列。 ,drop = TRUE,sep =' - ')) ggplot(tdat,aes(int,value,fill = Condition))+ stat_summary(fun.y ='mean',geom ='bar ')+ geom_point()+ facet_grid(。〜variable,scales =free_x)
在这种情况下,您可以简化代码而无需使用 interaction(),因为您还使用 facet_grid()。
ggplot(tdat,aes(Condition,value,fill = Condition))+ stat_summary(fun.y ='mean' ,geom ='bar')+ geom_point()+ facet_grid(。〜variable)
Hi have this dataset :
tdat=structure(list(Condition = structure(c(1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L), .Label = c("AS", "Dup", "MCH"), class = "factor"), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Bot", "Top", "All"), class = "factor"), value = c(1.782726022, 1, 2.267946449, 1.095240234, 1, 1.103630141, 1.392545278, 1, 0.854984833, 4.5163067, 1, 4.649271897, 0.769428018, 1, 0.483117123, 0.363854608, 1, 0.195799358, 0.673186975, 1, 1.661568993, 1.174998373, 1, 1.095026419, 1.278455823, 1, 0.634152231)), .Names = c("Condition", "variable", "value" ), row.names = c(NA, -27L), class = "data.frame") > head(tdat) Condition variable value 1 AS Bot 1.782726 2 MCH Bot 1.000000 3 Dup Bot 2.267946 4 AS Bot 1.095240 5 MCH Bot 1.000000 6 Dup Bot 1.103630You can plot it like that using this code :
ggplot(tdat, aes(x=interaction(Condition,variable,drop=TRUE,sep='-'), y=value, fill=Condition)) + geom_point() + scale_color_discrete(name='interaction levels')+ stat_summary(fun.y='mean', geom='bar', aes(label=signif(..y..,4),x=as.integer(interaction(Condition,variable))))+ facet_grid(.~variable)But as you can see it doesn't delete unused columns from each facet, do you know why ?
解决方案You get all levels shown on plot because all levels are used. Levels are dropped if they are not used at all. To remove levels in each facet add scale="free_x" to facet_grid(). But this will not work in particular case because you use different statements of x values in ggplot() and stat_summary() calls. I would suggest to add new column before plotting with interaction.
tdat$int<-with(tdat,interaction(Condition,variable,drop=TRUE,sep='-')) ggplot(tdat,aes(int,value,fill=Condition))+ stat_summary(fun.y='mean', geom='bar')+ geom_point()+ facet_grid(.~variable,scales="free_x")In this case you can simplify your code without interaction() because you use also facet_grid().
ggplot(tdat,aes(Condition,value,fill=Condition))+ stat_summary(fun.y='mean', geom='bar')+ geom_point()+ facet_grid(.~variable)更多推荐
为什么这个facet
发布评论