使用ggplot2

时间:2016-04-24 09:51:24

标签: r ggplot2 overlap boxplot direct-labels

如果要创建一个带有重叠点的箱线图,这些点在右侧标记。我尝试geom_dl形成directlabels包,但卡住了。

library(ggplot2)
library(directlabels)

set.seed(0)
x <- data.frame(label=LETTERS[1:15], 
                x="a",
                y = rnorm(15))
x$xpos <- as.numeric(x$x) + .25

g <- ggplot(x, aes(x=x, y=y)) + 
  geom_boxplot(width=.4) +
  geom_point(col="blue")

使用方法last.points.

定位没有重叠控制的标签
g + geom_dl(aes(x=xpos, label=label), method = "last.points") 

enter image description here

使用方法last.qp来避免重叠失败。

g + geom_dl(aes(x=xpos, label=label), method = "last.qp")   # fails

Error in approx(df[, x.var], df[, tiebreak.var], xvals) : 
  need at least two non-NA values to interpolate

任何想法,如何让geom_dl以另一种方式运行或实现正确的位置?

添加-上

使用方法last.bumpup作为@lukeA建议在下面工作得很好。但是,有些标签仍然重叠。有没有办法调整这个?

enter image description here

加载项2

我认为只有在x上使用多个级别的因子时才会出现问题。

set.seed(0)
x <- data.frame(label=LETTERS[1:24], 
                g1 = c("a"),
                g2 = c("a", "b"),
                y = rnorm(24))
x$g1 <- as.factor(x$g1)
x$g2 <- as.factor(x$g2)
x$xpos1 <- as.numeric(x$g1) + .25
x$xpos2 <- as.numeric(x$g2) + .25

第一张图的标签位置很好。对于具有两个级别的第二个,重叠仍然存在。

# one group
ggplot(x, aes(x=g1, y=y)) + 
  geom_boxplot(width=.4) +
  geom_point(col="blue") +
  geom_dl(aes(x=xpos1, label=label), method= "last.bumpup")

enter image description here

两个级别

# two groups
ggplot(x, aes(x=g2, y=y)) + 
  geom_boxplot(width=.4) +
  geom_point(col="blue") +
  geom_dl(aes(x=xpos2, label=label), method= "last.bumpup")

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用结合last.pointsbumpuplast.bumup <- list("last.points","bumpup"))的last.bumpup方法:

g + geom_dl(aes(x=xpos, label=label), method = "last.bumpup")  

enter image description here