在 ggplot2 ggrepel 中对齐可变宽度字体字符串 geom_label_repel
align variable width font strings in ggplot2 ggrepel geom_label_repel
我正在尝试在 ggrepel::geom_label_repel
中使用多个行标签。似乎 geom_label_repel
想要将所有文本居中 - 而我想将其向左冲洗。 hjust = 0
用 geom_label
做我想做的事,但用 geom_label_repel
做不到。我创建了一个函数来通过插入空格来做我想做的事情——但它只适用于等宽字体。
有没有办法让 geom_label_repel
与可变宽度字体左对齐?
library(tidyverse)
library(ggrepel)
site_timeline_dfx <- tribble(
~startDate, ~endDate, ~Event,
1984, NA, "Lorem ipsum dolor sit amet, sed, vestibulum, in lacinia erat arcu. Quis magnis sed phasellus ac",
2001, NA, "Vel cursus hac in. Nulla cum quam cum, amet tellus hendrerit.",
2008, 2009, "Adipiscing ut pellentesque malesuada sit venenatis integer proin sapien. Scelerisque ipsum ut.")
my_xwrapFun = function(x, width = 75){
x_wrap <- strwrap(x, width = width)
i <- length(x_wrap)
max_strln <- max(str_length(x_wrap))
x_wrap <- encodeString(x_wrap, width = width, justify ="l")
paste(x_wrap, collapse = "\n")
}
site_timeline_dfx <-
group_by(site_timeline_dfx, Event) %>%
mutate(Event_wrap = my_xwrapFun(Event))
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) + geom_point() +
geom_label(hjust = 0, size = 2) +
xlim(c(1984,2050))
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) + geom_point() +
geom_label_repel(hjust = 0, size = 2) +
xlim(c(1984,2050))
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) + geom_point() +
geom_label_repel(hjust = 0, size = 2, family = "mono") +
xlim(c(1984,2050))
这已在 ggrepel
的开发版本(版本 0.8.1.9000)中得到修复。
您的代码现在应该可以正常工作了。
devtools::install_github("slowkow/ggrepel")
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) +
geom_point() +
geom_label_repel(hjust = 0, direction="y") +
xlim(c(1984,2050))
我正在尝试在 ggrepel::geom_label_repel
中使用多个行标签。似乎 geom_label_repel
想要将所有文本居中 - 而我想将其向左冲洗。 hjust = 0
用 geom_label
做我想做的事,但用 geom_label_repel
做不到。我创建了一个函数来通过插入空格来做我想做的事情——但它只适用于等宽字体。
有没有办法让 geom_label_repel
与可变宽度字体左对齐?
library(tidyverse)
library(ggrepel)
site_timeline_dfx <- tribble(
~startDate, ~endDate, ~Event,
1984, NA, "Lorem ipsum dolor sit amet, sed, vestibulum, in lacinia erat arcu. Quis magnis sed phasellus ac",
2001, NA, "Vel cursus hac in. Nulla cum quam cum, amet tellus hendrerit.",
2008, 2009, "Adipiscing ut pellentesque malesuada sit venenatis integer proin sapien. Scelerisque ipsum ut.")
my_xwrapFun = function(x, width = 75){
x_wrap <- strwrap(x, width = width)
i <- length(x_wrap)
max_strln <- max(str_length(x_wrap))
x_wrap <- encodeString(x_wrap, width = width, justify ="l")
paste(x_wrap, collapse = "\n")
}
site_timeline_dfx <-
group_by(site_timeline_dfx, Event) %>%
mutate(Event_wrap = my_xwrapFun(Event))
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) + geom_point() +
geom_label(hjust = 0, size = 2) +
xlim(c(1984,2050))
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) + geom_point() +
geom_label_repel(hjust = 0, size = 2) +
xlim(c(1984,2050))
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) + geom_point() +
geom_label_repel(hjust = 0, size = 2, family = "mono") +
xlim(c(1984,2050))
这已在 ggrepel
的开发版本(版本 0.8.1.9000)中得到修复。
您的代码现在应该可以正常工作了。
devtools::install_github("slowkow/ggrepel")
ggplot(site_timeline_dfx, aes(x = startDate, y = 0.5, label = Event_wrap)) +
geom_point() +
geom_label_repel(hjust = 0, direction="y") +
xlim(c(1984,2050))