Justifying lines of text within individual ggrepel labels

余生颓废 提交于 2019-12-23 21:46:51

问题


I have a plot where I'm labelling elements with multi-line ggrepel labels. I'd like to right-justify within some of these and left-justify within others. See example:

p <- ggplot() +
  coord_cartesian(xlim=c(0,1), ylim=c(0,1)) +
  theme_void()
p

labelInfo <- data.frame(x=c(0.45,0.55), y=c(0.5,0.5), 
                        g=c("I'd like very much to be\nright justified","And I'd like to be\nleft justified"))

p + geom_label_repel(data=labelInfo, aes(x,y,label=g), 
                     box.padding = 0.5, point.padding = 0.75, 
                     nudge_x = c(-0.05,0.05), nudge_y = 0, direction="x",
                     arrow=arrow(length=unit(2,"mm"), ends="last", type="closed"))

If I were doing this with ggplot2 annotations, I'd do it like this, which yields what I want in terms of the left/right justification:

p + annotate("text", label="I'd like very much to be\nright justified", x=0.45, y=0.5, hjust=1) +
  annotate("text", label="And I'd like to be\nleft justified", x=0.55, y=0.5, hjust=0)

How do I achieve this with ggrepel labels?

Thanks!


回答1:


This has now been addressed in the development version of ggrepel (version 0.8.1.9000).

library(ggplot2)
devtools::install_github("slowkow/ggrepel") 

p <- ggplot() +
  coord_cartesian(xlim=c(0,1), ylim=c(0,1)) +
  theme_void()
p

labelInfo <- data.frame(x=c(0.45,0.55), y=c(0.5,0.5), 
                        g=c("I'd like very much to be\nright justified","And I'd like to be\nleft justified"))

p + geom_label_repel(data=labelInfo, aes(x,y,label=g), hjust=c(1,0),
                     box.padding = 0.5, point.padding = 0.75, 
                     nudge_x = c(-0.05,0.05), nudge_y = 0, direction="x",
                     arrow=arrow(length=unit(2,"mm"), ends="last", type="closed"))



来源:https://stackoverflow.com/questions/54448262/justifying-lines-of-text-within-individual-ggrepel-labels

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!