我有以下数据框:
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
部分。