R 在geom_箱线图中定义外观顺序

R 在geom_箱线图中定义外观顺序,r,ggplot2,R,Ggplot2,我有这个data.frame: df = data.frame(x = c(1,1,2,2,3,3), factor = c("crb","crb","ctx","ctx","bsl","bsl"), factor.level = c("pat","mat","pat","mat","pat","mat"), factor.level.color = c("blue","red","blue","red","blue","red"), ymin = c(0.031,0.152,0.071,0.0

我有这个data.frame:

df = data.frame(x = c(1,1,2,2,3,3), factor = c("crb","crb","ctx","ctx","bsl","bsl"), factor.level = c("pat","mat","pat","mat","pat","mat"), factor.level.color = c("blue","red","blue","red","blue","red"), ymin = c(0.031,0.152,0.071,0.026,0.051,0.032), lower = c(0.119,0.522,0.415,0.185,0.287,0.285), middle = c(0.298,0.701,0.615,0.384,0.500,0.499), upper = c(0.477,0.880,0.814,0.584,0.714,0.714), ymax = c(0.848,0.870,0.874,0.929,0.967,0.950),stringsAsFactors=F)
我想在一个
geom_盒形图中绘制它,这样
df$x
定义了x轴位置,
df$ymin
df$lower
df$middle
df$upper
df$ymax
定义了框,
df$factor
定义了x轴刻度标签,df$factor.level.color定义框的颜色,
df$factor.level
应显示在图例中(唯一值)。应在同一x轴位置绘制一对框。因此,需要定义透明度系数

这是我希望它看起来像什么的即兴版本:

(显然缺少x轴和y轴刻度值)

我认为这是我需要的代码:

pl = ggplot(data = df, aes(x = x)) + geom_boxplot(aes(lower = lower,upper = upper, middle = middle, ymin = ymin, ymax = ymax,color = factor.level.color, fill = factor.level.color),
      position = position_dodge(width = 0), width = 0.5, alpha = 0.5, stat = "identity") + scale_fill_identity("factor level", guide="legend", labels = df$factor.level) + 
      scale_color_identity("factor level", guide = "legend", labels = df$factor.level) + 
      scale_x_discrete(breaks = seq(1,length(unique(df$factor)),1), labels = unique(df$factor), limits = seq(1,length(unique(df$factor)),1)) + 
      labs(x = "factor",y = "fraction") + theme(axis.title.x = element_text(size = rel(0.8)), axis.title.y = element_text(size = rel(0.8)))
但结果有点混乱:

我想水平需要以某种方式定义,但我不知道如何定义。

在调用
ggplot(…)


您难道不能访问用于获取这些摘要的数据吗?您是指ymin、lower、middle、upper和ymax列?我知道,但我不认为这是相关的。我有一个类似的问题(),只是在那里颜色是唯一的,而在这里它们不是唯一的,我认为这就是我的代码不能在这里工作的原因。1秒之前<代码>位置=位置\u减淡(宽度=0.5)
会使它看起来更好
pl = ggplot(data = df, aes(x = factor(x))) + 
  geom_boxplot(aes(lower = lower,upper = upper, middle = middle, 
                   ymin = ymin, ymax = ymax,
                   color = factor.level.color, fill = factor.level.color),
               position = position_dodge(width = 0), 
               width = 0.5, alpha = 0.5, stat = "identity") +
  scale_fill_identity("factor level", guide="legend", labels = df$factor.level) + 
  scale_color_identity("factor level", guide = "legend", labels = df$factor.level) + 
  scale_x_discrete(breaks = seq(1,length(unique(df$factor)),1), 
                   labels = unique(df$factor), 
                   limits = seq(1,length(unique(df$factor)),1)) + 
  labs(x = "factor",y = "fraction") + 
  theme(axis.title.x = element_text(size = rel(0.8)), axis.title.y = element_text(size = rel(0.8)))