IT干货网

r之ggplot2 geom_boxplot 的用户定义参数

powertoolsteam 2024年11月24日 编程设计 64 0

我有以下数据框:

df = data.frame(ymin = c(0.35,0.4,0.25,0.3,0.55,0.6), lower = c(0.45,0.5,0.35,0.4,0.65,0.7), middle = c(0.5,0.55,0.4,0.45,0.7,0.75), upper = c(0.55,0.6,0.45,0.5,0.75,0.8), ymax = c(0.65,0.7,0.55,0.6,0.85,0.9), factor = c("parental","parental","cross","cross","sex","sex"), factor.label = c("paternal","maternal","F1i","F1R","M","F"), posterior.probability = c(0.92,0.92,0.97,0.97,0.99,0.99), x = c(1,1,2,2,3,3), colors = c("blue","red","gray30","gray70","lightskyblue","pink")) 

我想生成一个 ggplot2 箱形图,其中 df$x 定义箱子的 x 轴位置,df$lower、df$upper、df$middle、df$ymin、df$ymax 定义箱子,df$颜色定义框的颜色。如您所见,每对框都应放在相同的 x 轴位置。使用 alpha 参数,我将使框透明,以便重叠可见。

到目前为止我所拥有的是这段代码:

p = ggplot(beta.df, aes(x = x, color = colors)) 
p = p + geom_boxplot(aes(lower = lower,upper = upper, middle = middle, ymin = ymin, ymax = ymax, fill = colors), position = position_dodge(width = 0), width = 0.5, alpha = 0.5, stat = "identity") 

很明显,盒子的颜色被弄乱了——"blue""red" 盒子应该在 df$x = 1, "gray30""gray70" 框应位于 df$x = 2,并且 "lightskyblue""pink" 框应该位于 df$x = 3。所以我正在寻找解决办法。

我还希望指定图例标题和标签,而不是默认生成。此外,df$posterior.probability 值对于具有相同 x 轴位置的每对框都是相同的,我想要的是在图的顶部绘制这些值(每对一个),比​​如最大 y 轴值,或位于每对框的 max(ymax) 之上以及相应的 x 轴位置。换句话说,0.92、0.97 和 0.99 将分别绘制在 x 位置:1、2 和 3,以及绘图的最大 y 位置或这些位置 y 位置:0.75、0.65 和 0.95,分别。

请您参考如下方法:

您的箱线图重叠,据我从您的代码中了解到,您不希望这样。您的代码中不需要位置元素,您必须将 x 视为一个因素,以便将它们绘制成彼此相邻。

使用这段代码:

ggplot(df, aes(x = as.factor(x), color = colors)) +  
  geom_boxplot(aes(lower = lower,upper = upper, middle = middle, ymin = ymin, ymax = ymax, fill = colors), width = 0.5, alpha = 0.5, stat = "identity") + 
  geom_text(data = df, aes(x = as.factor(x), y = ymax, label = posterior.probability), size = 4, vjust = -0.5) + 
  scale_fill_identity("Color legend", guide = "legend", labels = c("paternal","F1i","F1R","M","F","maternal")) + 
  scale_color_identity("Color legend", guide = "legend", labels = c("paternal","F1i","F1R","M","F","maternal")) + 
  labs(title = "Plot title", x = "X-lab label", y = "Y-lab label") 

你得到这个结果:

如果您不希望文本标签使用相同颜色,请将 color = "black" 添加到 geom_text 部分。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!