【发布时间】:2019-01-03 19:18:20
【问题描述】:
我有一个数据框,其中的数据按“变量”列中的类别组织。我想为每个类别生成一个单独的 geom_point() 图表,我想根据“变量”列中的类别值以及每个图表的图例来指定图表的颜色。我不想使用 facetting 来做这件事,因为我的实际用例比这个复杂得多。
这里是一些示例代码:
df <- rbind(data.frame(date = 1:100, value = rnorm(100, 0, 1), variable = "a_variable"),
data.frame(date = 1:100, value = rnorm(100, 0, 1), variable = "b_variable"))
a_list_of_colours <- list()
a_list_of_colours[["a_variable"]] <- "red"
a_list_of_colours[["b_variable"]] <- "blue"
循环 1
a_list_of_charts <- list()
for(i in 1:length(a_list_of_colours)){
print(a_list_of_colours[[i]])
a_list_of_charts[[i]] <- ggplot(df %>%
filter(variable == names(a_list_of_colours)[i]),
aes(x = date, y = value, colour = variable)) +
geom_point(shape = 19, size = 2) +
scale_colour_manual(values = a_list_of_colours[[names(a_list_of_colours)[i]]])
}
循环 2
a_list_of_charts <- list()
for(i in 1:length(a_list_of_colours)){
print(a_list_of_colours[[i]])
a_list_of_charts[[i]] <- ggplot(df %>%
filter(variable == names(a_list_of_colours)[i]),
aes(x = date, y = value, colour = variable)) +
geom_point(data = df, aes(x = date, y = value, colour = variable),
shape = 19, size = 2,
colour = a_list_of_colours[[names(a_list_of_colours)[i]]])
}
循环 3
a_list_of_charts <- list()
for(i in 1:length(a_list_of_colours)){
print(a_list_of_colours[[i]])
a_list_of_charts[[i]] <- ggplot() +
geom_point(data = df %>%
filter(variable == names(a_list_of_colours)[i]),
aes(x = date, y = value, colour = variable),
shape = 19, size = 2,
colour = a_list_of_colours[[names(a_list_of_colours)[i]]])
}
我希望这些循环中的任何一个都生成两张图表,一张是红点,一张是蓝点。我主要好奇为什么第一个循环将值传递给scale_colour_manual() 不起作用并且总是产生蓝色图表。但是,我也对解决方案感兴趣。奇怪的是,我无法通过在 geom_point() 中传递变量来生成带有后两个循环的图例。任何想法都非常感谢。
【问题讨论】: