使文本标签跨越多个 ggplot facet 网格窗格
Make text labels span multiple ggplot facet grid panes
如何使 geom_text_repel()
标签跨越多个 facet_grid()
窗格?例如,如果有许多长标签不适合每个网格图的适当尺寸,则应将标签定位为就好像 facet_grid()
是单个图一样。
例如:
df <- data.frame(
x = rep(1:3, 5),
y = runif(15),
label = paste0("very long label ", 1:15),
group = do.call(c, lapply(paste0("group ", 1:5), function(x) rep(x, 3)))
)
library(ggplot2)
library(ggrepel)
ggplot(df, aes(x, y, label = label)) +
geom_point() +
facet_grid(cols = vars(group)) +
geom_text_repel()
如果有另一种方法可以在 x 轴上对样本进行分组以模拟列式小平面网格,那也很好。在我的例子中,我需要通过分组变量(相应标记)对样本进行分组,然后在每个组中通过连续变量对它们进行排序。
使用 coord_cartesian
中的 clip = "off"
:
library(ggplot2)
library(ggrepel)
ggplot(df, aes(x, y, label = label)) +
geom_point() +
facet_grid(cols = vars(group)) +
geom_text_repel() +
coord_cartesian(clip = "off")
如果这还不够,另一种选择是使用多线 stringr::str_wrap
:
library(stringr)
library(dplyr)
df %>%
mutate(label_wrapped = str_wrap(label, width = 20)) %>%
ggplot(aes(x, y, label = label_wrapped)) +
geom_point() +
facet_grid(cols = vars(group)) +
geom_text_repel() +
coord_cartesian(clip = 'off')
数据
set.seed(2)
df <- data.frame(
x = rep(1:3, 5),
y = runif(15),
label = paste0("very very very long label ", 1:15),
group = do.call(c, lapply(paste0("group ", 1:5), function(x) rep(x, 3)))
)
如何使 geom_text_repel()
标签跨越多个 facet_grid()
窗格?例如,如果有许多长标签不适合每个网格图的适当尺寸,则应将标签定位为就好像 facet_grid()
是单个图一样。
例如:
df <- data.frame(
x = rep(1:3, 5),
y = runif(15),
label = paste0("very long label ", 1:15),
group = do.call(c, lapply(paste0("group ", 1:5), function(x) rep(x, 3)))
)
library(ggplot2)
library(ggrepel)
ggplot(df, aes(x, y, label = label)) +
geom_point() +
facet_grid(cols = vars(group)) +
geom_text_repel()
如果有另一种方法可以在 x 轴上对样本进行分组以模拟列式小平面网格,那也很好。在我的例子中,我需要通过分组变量(相应标记)对样本进行分组,然后在每个组中通过连续变量对它们进行排序。
使用 coord_cartesian
中的 clip = "off"
:
library(ggplot2)
library(ggrepel)
ggplot(df, aes(x, y, label = label)) +
geom_point() +
facet_grid(cols = vars(group)) +
geom_text_repel() +
coord_cartesian(clip = "off")
如果这还不够,另一种选择是使用多线 stringr::str_wrap
:
library(stringr)
library(dplyr)
df %>%
mutate(label_wrapped = str_wrap(label, width = 20)) %>%
ggplot(aes(x, y, label = label_wrapped)) +
geom_point() +
facet_grid(cols = vars(group)) +
geom_text_repel() +
coord_cartesian(clip = 'off')
数据
set.seed(2)
df <- data.frame(
x = rep(1:3, 5),
y = runif(15),
label = paste0("very very very long label ", 1:15),
group = do.call(c, lapply(paste0("group ", 1:5), function(x) rep(x, 3)))
)