我有一个数据框,数据在“变量”列中按类别组织。我想为每个类别生成一个单独的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"
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]]])
}
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]]])
}
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()来产生后两个循环的图例。任何想法都很感激。
答案 0 :(得分:0)
尝试将您的ggplot2软件包版本更新为最新版本(3.1.0),它应该可以正常工作(至少在我的产品上如此)。怀疑是由于this change导致了强制参数,尽管我不太了解其基本细节。
此代码有一个问题:当在ggplot()
和geom_point()
中都提供数据参数时,后者将覆盖前者,因此实际上是在两个图中绘制整个数据集。 >
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]]])
此代码可显示具有正确颜色的正确数据子集。虽然如果您也想使用图例,则最好使用Loop 1(假设您能够更新软件包的版本)。