当两个组的标签相同时使用 directlabels::geom_dl
Using directlabels::geom_dl when label is the same for two groups
我在使用 geom_dl()
时遇到问题,它没有正确放置我的标签,因为两个组具有相同的标签。我可以看到
data$groups <- data$label
GeomDl 调用内部导致了问题,但我不知道如何解决它。
这是目前的样子:
它应该是这样的:
这是数据和 ggplot 代码:
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"))
这是一些带有不可见 unicode 字符的巫术:
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"))
如果有多行具有相同的标签,您可以将相同的字符添加一次、两次等。同样的想法可以用来编写一个最小的预处理函数,这将是一个或多或少的通用解决方案。
完整的解决方案可能如下所示(@fishgal64):
require(magrittr)
require(dplyr)
dat <- select(dat, level, pchange) %>%
unique() %>%
mutate(pchange2 = ifelse(duplicated(pchange), paste0(pchange, "\u200B"), pchange)) %>%
merge(dat)
我在使用 geom_dl()
时遇到问题,它没有正确放置我的标签,因为两个组具有相同的标签。我可以看到
data$groups <- data$label
GeomDl 调用内部导致了问题,但我不知道如何解决它。
这是目前的样子:
它应该是这样的:
这是数据和 ggplot 代码:
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"))
这是一些带有不可见 unicode 字符的巫术:
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"))
如果有多行具有相同的标签,您可以将相同的字符添加一次、两次等。同样的想法可以用来编写一个最小的预处理函数,这将是一个或多或少的通用解决方案。
完整的解决方案可能如下所示(@fishgal64):
require(magrittr)
require(dplyr)
dat <- select(dat, level, pchange) %>%
unique() %>%
mutate(pchange2 = ifelse(duplicated(pchange), paste0(pchange, "\u200B"), pchange)) %>%
merge(dat)