создать вертикально неперекрывающиеся метки рядом с графиком с помощью ggplot2

Если вы хотите создать коробчатую диаграмму с наложенными точками, которые помечены справа. Я пробовал 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")

Позиционируйте метки без контроля перекрытия с помощью метода _4 _. < / а>

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 или получить подходящую подстановку другим способом?

Дополнение

Использование метода 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")

введите описание изображения здесь


person Mark Heckmann    schedule 24.04.2016    source источник
comment
Я использую directlabels_2015.12.16 и ggplot2_2.1.0.   -  person Mark Heckmann    schedule 24.04.2016
comment
Ах, спасибо! Моя версия прямых ярлыков сильно устарела   -  person jaimedash    schedule 24.04.2016


Ответы (1)


Вы можете использовать метод last.bumpup , который объединяет last.points и bumpup (last.bumup <- list("last.points","bumpup")):

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

введите описание изображения здесь

person lukeA    schedule 24.04.2016
comment
хорошо, спасибо! Однако у меня все еще есть совпадения (см. Надстройку выше). Есть идеи для этого? - person Mark Heckmann; 24.04.2016
comment
Странно, перекрытий быть не должно. Возможно, уменьшите размер шрифта и / или увеличьте пределы 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 <- 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) - person lukeA; 24.04.2016
comment
Спасибо за код. Я полагал, что проблема возникает только при использовании нескольких уровней на x (см. Надстройку 2 выше). Жук? - person Mark Heckmann; 24.04.2016
comment
Я не знаю. Если ничего не получается, я бы использовал фасеты вроде + facet_wrap(~g2, scales = "free_x") + theme(panel.margin=unit(0, "cm")). - person lukeA; 24.04.2016