【问题标题】:create vertically non-overlapping labels next to boxplot using ggplot2使用 ggplot2 在箱线图旁边创建垂直不重叠的标签
【发布时间】:2016-04-24 19:32:20
【问题描述】:

如果想创建一个带有重叠点的箱线图,这些点在右侧标记。我尝试了 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") 

使用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 运行或以其他方式实现正确的placemant?

插件

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

插件 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")

两个层次

# 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")

【问题讨论】:

  • 我使用directlabels_2015.12.16ggplot2_2.1.0
  • 啊,谢谢!我的 directlabels 版本已经过时了

标签: r ggplot2 overlap boxplot direct-labels


【解决方案1】:

您可以使用last.bumpup 方法,它结合了last.pointsbumpup (last.bumup &lt;- list("last.points","bumpup")):

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

【讨论】:

  • 很好,谢谢!但是,我仍然会重叠(请参阅上面的附加组件)。对此有何想法?
  • 奇怪,不应该有任何重叠。可能会减小字体大小和/或增加 y 限制或设备高度:g + geom_dl(aes(x=xpos, label=label), method = list("last.bumpup", cex=.8)) + ylim(c(min(x$y), max(x$y)*10))ggsave(tf &lt;- tempfile(fileext = ".png"), g + geom_dl(aes(x=xpos, label=label), method = "last.bumpup") + ylim(c(min(x$y), max(x$y)*15)), dpi = 320, height=12); shell.exec(tf)
  • 感谢您的代码。我认为只有在 x 上使用多个级别时才会出现问题(参见上面的附加组件 2)。一个错误?
  • 我不知道。如果一切都失败了,我会使用像 + facet_wrap(~g2, scales = "free_x") + theme(panel.margin=unit(0, "cm")) 这样的方面。
猜你喜欢
  • 2023-03-20
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多