Combine legend in ggplot2

匿名 (未验证) 提交于 2019-12-03 02:18:01

问题:

I have a plot of multiple geom_point and a single stat_function in ggplot2. Is there a way to show a single legend?

df <- data.frame("x"=c(1:5), "a"=c(1,2,3,3,3), "b"=c(1,1.1,1.3,1.5,1.5)) df <- melt(df, "x") p <- ggplot(df, aes(x=x, y=value)) +   geom_point(aes(colour=variable, shape=variable)) +   stat_function(aes(colour="log2(x)"), fun=log2) 

I want to have a single legend with the blue line and the two colored shapes. I tried

scale_colour_discrete(name="legend", breaks=c("a", "b", "log2(x)")) + scale_shape_discrete(name="legend", breaks=c("a", "b")) 

but this does not work. Is there a way to do this automatically or by hand?

Thanks in advance.

回答1:

Probably an easier alternative is to use override.aes as follows:

ggplot(df, aes(x = x, y = value)) +   geom_point(aes(colour = variable, shape = variable), size = 3) +   stat_function(aes(colour = "log2(x)"), fun = log2, size = 1.5) +   guides(shape = FALSE,          colour = guide_legend(override.aes = list(shape = c(16, 17, NA),                                                    linetype = c("blank", "blank", "solid")))) 

which results in:



回答2:

Specify a . as the shape symbol for your curve and a blank line for your points:

p <- ggplot(df, aes(x=x, y=value)) +   geom_point(aes(colour=variable, shape=variable, linetype = variable), size = 3) +   stat_function(aes(colour="log2(x)", shape = "log2(x)", linetype = "log2(x)"), fun=log2) +   scale_shape_manual(values = setNames(c(16, 17, 46), c("a", "b", "log2(x)"))) +   scale_linetype_manual(values = setNames(c(0, 0, 1), c("a", "b", "log2(x)"))) print(p) 



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!