这是我的数据集示例:
df <- data.frame(group = rep(c("group1","group2","group3", "group4", "group5", "group6"), each=3),
X = paste(letters[1:18]),
Y = c(1:18))
如您所见,有三个变量,其中两个是分类的(group
和X
)。我使用ggplot2构建了折线图,其中X轴为X
,Y轴为Y
。
我想使用group
变量为背景添加阴影,因此必须出现6种不同的颜色。
我试过这段代码:
ggplot(df, aes(x = X, y = Y)) +
geom_rect(xmin = 0, xmax = 3, ymin = -0.5, ymax = Inf,
fill = 'blue', alpha = 0.05) +
geom_point(size = 2.5)
但geom_rect()
仅在X轴上为0
和3
之间的区域着色。
我想我可以通过复制geom_rect()
这么多次来手动完成。但我确信必须有一个更漂亮的代码使用变量本身。有什么想法吗?
答案 0 :(得分:5)
要获得整个图表的着色,geom_rect
需要所有矩形的xmin
和xmax
位置,因此需要通过映射xmin
和{xmax
来提供这些位置。 {1}}到数据中的列,而不是对它们进行硬编码。
ggplot(df, aes(x = X, y = Y)) +
geom_rect(aes(xmin = X, xmax = dplyr::lead(X), ymin = -0.5, ymax = Inf, fill = group),
alpha = 0.5) +
geom_point(size = 2.5) +
theme_classic()
答案 1 :(得分:1)
这会让你接近 - 需要在数据框中添加几列。在这里使用dplyr。
df <- df %>%
group_by(group) %>%
mutate(xmin = sort(X)[1],
xmax = sort(X, decreasing = T)[1])
ggplot(df, aes(x = X, y = Y)) +
geom_point(size = 2.5) +
geom_rect(aes(xmin=xmin, xmax = xmax, fill = group), ymin = -0.5, ymax = Inf,
alpha = 0.05)
答案 2 :(得分:0)