我希望使用交互作用来创建带有图例子组的绘图,为了创建子标题,我使用了一些零值的虚假数据。
我的样本数据:
library(ggplot2)
df <- data.frame(value = runif(27, 0, 1),
x = rep(1:3, each = 3),
group1 = rep(c(letters[1:3])),
group2 = rep(c("fake", "X", "Y"), each = 9))
# introducing fake data
df[df$group2 == "fake", "value"] <- 0
df$group2 <- relevel(df$group2, ref = "fake")
我差点就能创建出期望的图表了:
# labels
lbl1 <- c(expression(bold("HEADING 1")), paste("LABEL 1", 1:2),
expression(bold("HEADING 2")), paste("LABEL 2", 1:2),
expression(bold("HEADING 3")), paste("LABEL 3", 1:2))
fills <- c("white", "red1", "red3",
"white", "blue1", "blue3",
"white", "green1", "green3")
colo <- c("white", "black", "black",
"white", "black", "black",
"white", "black", "black")
ggplot(df, aes(x = x, y = value,
fill = interaction(group2, group1),
colour = interaction(group2, group1))) +
geom_col(position = "dodge") +
scale_fill_manual("", values = fills, label = lbl1) +
scale_colour_manual("", values = colo, label = lbl1)
然而,我不希望在子组中出现类似LABEL 1 1
和LABEL 1 2
等的标签,我想只有LABEL 1
和LABEL 2
。在指定这样的标签时,我无法创建这样的绘图:
lbl2 <- c(expression(bold("HEADING 1")), paste("LABEL", 1:2),
expression(bold("HEADING 2")), paste("LABEL", 1:2),
expression(bold("HEADING 3")), paste("LABEL", 1:2))
ggplot(df, aes(x = x, y = value,
fill = interaction(group2, group1),
colour = interaction(group2, group1))) +
geom_col(position = "dodge") +
scale_fill_manual("", values = fills, label = lbl2) +
scale_colour_manual("", values = colo, label = lbl2)
要明确的是,这是期望的输出结果:
scale_color_manual
或仅使用scale_fill_manual
,则一切正常,但如果您同时使用两者来制作组合图例,则会出现问题。我不知道为什么会这样。 - aosmithscale_color_manual
或仅使用scale_fill_manual
。此外,这似乎并不是interaction(group2, group1)
的问题,因为创建一个新的因子来组合两个组会导致相同的问题。 - Adela