如何使用 ggplot、facet_grid 和 geom_text 在列中添加变量作为文本
How to add variables in a column as text using ggplot, facet_grid and geom_text
考虑以下小标题
library(tidyverse)
df <-tibble(year = rep(1981:2020,4),
x = rep(letters[1:8],20),
y = rnorm(n = 160,0,1),
group = rep(letters[10:13],40))
我想根据变量 group
绘制多面网格,作为每个面板中的文本,年份 (year
) 对应于每个组 (group
)。
低于年份重叠且不正确的失败尝试
ggplot() +
geom_line(data = df, aes(x = x, y = y, color = group)) +
geom_text(
data = df,
aes(
x = x,
y = 3,
label = year,
color = group
),
alpha = 0.7,
show.legend = FALSE
) +
facet_grid( ~ group)
感谢支持!
我不确定我明白你想要什么,但你可以试试下面的方法
ggplot() +
geom_line(data = df, aes(x = x, y = y, color = group)) +
geom_text(
data = df,
aes(
x = x,
y = 3,
label = year,
color = group
),
alpha = 0.7,
show.legend = FALSE,
position = position_stack(vjust = 1.5),
# stat = "unique"
) +
facet_grid( ~ group)
如果您不想重复 year
,请取消注释 stat = "unique"
行。
更新
如果你想要水平对齐,你可以创建一个新的数据框
df2 <- df %>%
group_by(x, group) %>%
summarise(year = str_c(unique(year), collapse=", "))
ggplot() +
geom_line(data = df, aes(x = x, y = y, color = group)) +
geom_text(
data = df2,
aes(
x = x,
y = 1,
label = year,
color = group
),
alpha = 0.7,
show.legend = FALSE,
position = position_stack(vjust = 1.5),
stat = "unique"
) +
facet_grid( ~ group)
但与此对齐标签会重叠。您可以尝试减少 font-size 或使用 facet_wrap
将面板排列成两行。
您还可以在 df2
中操作字符串并在需要的地方添加 "\n"
,但我认为这不能轻易适应每个字符串。
考虑以下小标题
library(tidyverse)
df <-tibble(year = rep(1981:2020,4),
x = rep(letters[1:8],20),
y = rnorm(n = 160,0,1),
group = rep(letters[10:13],40))
我想根据变量 group
绘制多面网格,作为每个面板中的文本,年份 (year
) 对应于每个组 (group
)。
低于年份重叠且不正确的失败尝试
ggplot() +
geom_line(data = df, aes(x = x, y = y, color = group)) +
geom_text(
data = df,
aes(
x = x,
y = 3,
label = year,
color = group
),
alpha = 0.7,
show.legend = FALSE
) +
facet_grid( ~ group)
感谢支持!
我不确定我明白你想要什么,但你可以试试下面的方法
ggplot() +
geom_line(data = df, aes(x = x, y = y, color = group)) +
geom_text(
data = df,
aes(
x = x,
y = 3,
label = year,
color = group
),
alpha = 0.7,
show.legend = FALSE,
position = position_stack(vjust = 1.5),
# stat = "unique"
) +
facet_grid( ~ group)
如果您不想重复 year
,请取消注释 stat = "unique"
行。
更新
如果你想要水平对齐,你可以创建一个新的数据框
df2 <- df %>%
group_by(x, group) %>%
summarise(year = str_c(unique(year), collapse=", "))
ggplot() +
geom_line(data = df, aes(x = x, y = y, color = group)) +
geom_text(
data = df2,
aes(
x = x,
y = 1,
label = year,
color = group
),
alpha = 0.7,
show.legend = FALSE,
position = position_stack(vjust = 1.5),
stat = "unique"
) +
facet_grid( ~ group)
但与此对齐标签会重叠。您可以尝试减少 font-size 或使用 facet_wrap
将面板排列成两行。
您还可以在 df2
中操作字符串并在需要的地方添加 "\n"
,但我认为这不能轻易适应每个字符串。