2016-05-03 9 views
3

Ich habe ein Problem mit geom_dl(), wo es mein Etikett nicht richtig platziert, weil zwei Gruppen das gleiche Label haben. Ich kann sehen, dassVerwendung von directlabels :: geom_dl wenn Label für zwei Gruppen gleich ist

data$groups <- data$label 

innerhalb des GeomDl Anrufs die Probleme verursacht, aber ich kann nicht herausfinden, wie es zu beheben.

Dies ist, was es sieht derzeit wie:

labelplacedincorrectly

und das ist, wie es aussehen sollte:

Hier sind die Daten und die ggplot Code:

dat <- structure(list(level = structure(c(3L, 3L, 1L, 1L, 2L, 2L), .Label = c("2", "3", "1"), class = "factor"), year = c(2013L, 2014L, 2013L, 2014L, 2013L, 2014L), mean = c(9.86464372862218, 9.61027271206025, 18.3483708337732, 15.3459903281993, 6.75036415837688, 7.33169996044336), pchange = c(" 68%", " 68%", " 76%", " 76%", " 76%", " 76%")), .Names = c("level", "year", "mean", "pchange"), row.names = c(413L, 414L, 419L, 420L, 425L, 426L), class = "data.frame") 

ggplot(dat, aes(x = year, y = mean)) + 
    geom_line(aes(color = level)) + 
    geom_dl(aes(label=pchange, color=level), method=list("last.qp")) 

Antwort

1

Hier ‚S einige Voodoo mit unsichtbarem Unicode-Zeichen:

dat$pchange2 <- dat$pchange 
dat$pchange2[3:4] <- paste0(dat$pchange[3:4], "\u200B") 

ggplot(dat, aes(x = year, y = mean)) + 
    geom_line(aes(color = level)) + 
    geom_dl(aes(label=pchange2, color=level), method=list("last.qp")) 

enter image description here

Wenn Sie mehrere Zeilen mit dem gleichen Label haben, können Sie das gleiche Zeichen einmal Additionen, zweimal usw. Die gleiche Idee kann verwendet werden, Schreibe eine minimale Vorverarbeitungsfunktion, die eine mehr oder weniger universelle Lösung wäre.

Hier ist, wie eine komplette Lösung wie (von @ fishgal64) aussehen könnte:

require(magrittr) 
require(dplyr) 

dat <- select(dat, level, pchange) %>% 
    unique() %>% 
    mutate(pchange2 = ifelse(duplicated(pchange), paste0(pchange, "\u200B"), pchange)) %>% 
    merge(dat) 
+0

Fühlen Sie sich frei, dass in meiner Antwort hinzufügen, wenn Sie es wünschen. Elegant! – tonytonov

Verwandte Themen