我希望在一组箱线图上放置一个底层,以指示从另一个来源和另一个数据框中绘制的一些数据的范围。制作一个覆盖层很容易,但制作一个底层很困难。
为了这个目的,想象一下我正在试图将一些来自于mtcars的数据放置在diamonds数据的箱线图下方:
然而,这会改变x轴标签。我认为可以通过以下方式添加轴标签:
为了这个目的,想象一下我正在试图将一些来自于mtcars的数据放置在diamonds数据的箱线图下方:
# Find quantiles of mtcars$drat
mQ <- quantile(mtcars$wt, c(0.025, 0.975))
# Place them in a data frame with factor limits of diamonds$cut
mtcarsQ <- data.frame(x=c(min(as.numeric(diamonds$cut)), max(as.numeric(diamonds$cut))), ymin=rep(mQ[1], 2), ymax=rep(mQ[2], 2))
# Plot diamonds$cut, with overlay of quantiles from mtcars
ggplot() +
geom_boxplot(data=diamonds, aes(x=cut, y=y)) +
geom_ribbon(data=mtcarsQ, aes(x=x, ymin=ymin, ymax=ymax), alpha=0.2)+
coord_cartesian(ylim=c(0, 12))
这种方法很好 - 但我(实际上是我的合著者)希望geom_ribbon
位于箱线图的下方而不是上方。(色带的颜色似乎会干扰箱线图的颜色)。当我尝试反转geoms的顺序时,如下所示:
ggplot() +
geom_ribbon(data=mtcarsQ, aes(x=x, ymin=ymin, ymax=ymax), alpha=0.2)+
geom_boxplot(data=diamonds, aes(x=cut, y=y))
我会翻译成中文:
我得到了“错误:提供给连续比例的离散值”,因为ggplot不想将一个因子映射到连续比例。
我可以尝试将该因子转换为数字:
ggplot() +
geom_ribbon(data=mtcarsQ, aes(x=x, ymin=ymin, ymax=ymax), alpha=0.2)+
geom_boxplot(data=diamonds, aes(x=as.numeric(cut), y=y))
然而,这会改变x轴标签。我认为可以通过以下方式添加轴标签:
ggplot() +
geom_ribbon(data=mtcarsQ, aes(x=x, ymin=ymin, ymax=ymax), alpha=0.2)+
geom_boxplot(data=diamonds, aes(x=as.numeric(cut), y=y, fill=cut, group=cut)) +
scale_x_discrete(labels=levels(diamonds$cut)) +
coord_cartesian(ylim=c(0, 12))
但是我不明白为什么x轴会出现额外的因素水平。
当箱线图具有离散的x轴时,是否有更简单的方法在箱线图下放置一个矩形?