2016-04-24 1 views
3

Если вы хотите создать ящик с наложенными точками, которые помечены справа. Я попробовал geom_dl форму directlabels пакет, но застрял.создайте вертикально неперекрывающиеся метки рядом с boxplot, используя ggplot2

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 работает или достижения надлежащего placemant по-другому?

Надстройка на

Используя метод last.bumpup, как @lukeA предлагаемых ниже работает достаточно хорошо. Однако некоторые метки все еще перекрываются. Есть ли способ настроить это?

enter image description here

Add-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

+0

Я использую '' directlabels_2015.12.16' и ggplot2_2.1.0'. –

+0

Ах, спасибо! Моя версия directlabels была устаревшей – jaimedash

ответ

2

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

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

enter image description here

+0

приятно, спасибо! Тем не менее, я все еще получаю перекрытие (см. Надпись выше). Есть идеи для этого? –

+0

Странно, не должно быть перекрытий. Возможно, уменьшите размер шрифта и/или увеличьте пределы 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 = метка), method = "last.bumpup") + ylim (c (min (x $ y), max (x $ y) * 15)), dpi = 320, height = 12); shell.exec (tf) ' – lukeA

+0

Спасибо за код. Я понял, что проблема возникает только при использовании нескольких уровней в x (см. Дополнение 2 выше). Жук? –