ggplot2 geom_boxplot 与刻面并排
ggplot2 geom_boxplot side by side with facets
我有这些数据:
set.seed(1)
df <- data.frame(y=rnorm(12),name=factor(rep(c("a","a","b","b","c","c"),2),levels=c("a","b","c")),side=factor(rep(1:2,6),levels=1:2),group=factor(c(rep("x",6),rep("y",6)),levels=c("x","y")),stringsAsFactors=F)
df$upper <- df$y+0.1*df$y
df$lower <- df$y-0.1*df$y
df$max <- df$y+0.25*df$y
df$min <- df$y-0.25*df$y
我想 ggplot
-geom_boxplot
它们有两个方面,顶部是 df$group == x
,底部是 df$group == y
,其中在每个方面 df$side == 1
出现在 df$side == 2
的左侧。我也想给 df$group == x
darkgray
和 df$group == y
darkred
.
上色
这是我试过的方法:
library(ggplot2)
p <- ggplot(data=df,aes(name,color=group))+facet_wrap(~group,ncol=1)+scale_color_manual(values=c("darkgray","darkred"),labels=levels(df$group),name="group")+scale_fill_manual(values=c("darkgray","darkred"),labels=levels(df$group),name="group")
p <- p+geom_boxplot(aes(fill=group,lower=lower,upper=upper,middle=y,ymin=min,ymax=max),position=position_dodge(width=0),alpha=0.5,stat="identity")+theme(text=element_text(size=10))
p <- p+guides(fill=guide_legend(reverse=FALSE),colour=guide_legend(reverse=FALSE))
p
给我:
除了 df$side == 2
的左边没有 df$side == 1
之外很接近。
知道怎么做吗?
我认为这可能是您想要的,它使用 interaction
根据其参数水平的所有组合创建一个因子(您也可以使用 side:name
):
ggplot(df, aes(x=name, group=interaction(side, name),
col=group, fill=group)) +
facet_wrap(~group) +
geom_boxplot(aes(lower = lower, upper = upper,
middle = y, ymin = min, ymax = max),
position = position_dodge(width = 0.5),
alpha = 0.5, stat = "identity")
使用颜色来显示哪一侧是哪一侧可能会更清楚,因为这些方面已经标记了组:
ggplot(df, aes(x=name, group=interaction(side, name),
col=side, fill=side)) +
facet_wrap(~group) +
geom_boxplot(aes(lower = lower, upper = upper,
middle = y, ymin = min, ymax = max),
position = position_dodge(width = 0.5),
alpha = 0.5, stat = "identity")
我有这些数据:
set.seed(1)
df <- data.frame(y=rnorm(12),name=factor(rep(c("a","a","b","b","c","c"),2),levels=c("a","b","c")),side=factor(rep(1:2,6),levels=1:2),group=factor(c(rep("x",6),rep("y",6)),levels=c("x","y")),stringsAsFactors=F)
df$upper <- df$y+0.1*df$y
df$lower <- df$y-0.1*df$y
df$max <- df$y+0.25*df$y
df$min <- df$y-0.25*df$y
我想 ggplot
-geom_boxplot
它们有两个方面,顶部是 df$group == x
,底部是 df$group == y
,其中在每个方面 df$side == 1
出现在 df$side == 2
的左侧。我也想给 df$group == x
darkgray
和 df$group == y
darkred
.
这是我试过的方法:
library(ggplot2)
p <- ggplot(data=df,aes(name,color=group))+facet_wrap(~group,ncol=1)+scale_color_manual(values=c("darkgray","darkred"),labels=levels(df$group),name="group")+scale_fill_manual(values=c("darkgray","darkred"),labels=levels(df$group),name="group")
p <- p+geom_boxplot(aes(fill=group,lower=lower,upper=upper,middle=y,ymin=min,ymax=max),position=position_dodge(width=0),alpha=0.5,stat="identity")+theme(text=element_text(size=10))
p <- p+guides(fill=guide_legend(reverse=FALSE),colour=guide_legend(reverse=FALSE))
p
给我:
除了 df$side == 2
的左边没有 df$side == 1
之外很接近。
知道怎么做吗?
我认为这可能是您想要的,它使用 interaction
根据其参数水平的所有组合创建一个因子(您也可以使用 side:name
):
ggplot(df, aes(x=name, group=interaction(side, name),
col=group, fill=group)) +
facet_wrap(~group) +
geom_boxplot(aes(lower = lower, upper = upper,
middle = y, ymin = min, ymax = max),
position = position_dodge(width = 0.5),
alpha = 0.5, stat = "identity")
使用颜色来显示哪一侧是哪一侧可能会更清楚,因为这些方面已经标记了组:
ggplot(df, aes(x=name, group=interaction(side, name),
col=side, fill=side)) +
facet_wrap(~group) +
geom_boxplot(aes(lower = lower, upper = upper,
middle = y, ymin = min, ymax = max),
position = position_dodge(width = 0.5),
alpha = 0.5, stat = "identity")