我的问题是我想在一个线图上叠加一个散点图,这两个图是'用一个变量改变颜色。我只想保留一种颜色的图例。如果我使用scale_colour_discrete(guide = "none")
它们都会消失。
可重复的例子是:
library(reshape2)
iris2 <- melt(iris, id.var = "Species")
ggplot(iris2, aes(x = variable, y = value, group = Species)) +
geom_point(aes(color = ifelse(value < 3, "type1", "type2"))) +
geom_line(aes(color = Species))
我只想展示物种&#39;而不是类型。
答案 0 :(得分:4)
在geom_point图层中设置show_guide=FALSE
ggplot(iris2, aes(x = variable, y = value, group = Species)) +
geom_point(aes(color = ifelse(value < 3, "type1", "type2")), show_guide=FALSE) +
geom_line(aes(color = Species)) +
scale_colour_discrete("Species", breaks=levels(iris2$Species))
答案 1 :(得分:2)
我不确定当两者都与同一美学联系在一起时,你是否只能摆脱传奇的一部分。但这是一个解决方法:对你的点使用fill
美学,然后摆脱fill
美学的传说。在color=NA
内设置geom_point
可以摆脱每个点周围的边框颜色(默认情况下为黑色)。您还需要使用具有单独边框和填充的标记样式。有关可用的样式,请参阅?pch
。
library(reshape2)
library(ggplot2)
iris2 = melt(iris, id.var = "Species")
ggplot(iris2, aes(x = variable, y = value, group = Species)) +
geom_point(aes(fill = ifelse(value < 3, "type1", "type2")),
pch=21, color=NA) +
geom_line(aes(color = Species)) +
guides(fill=FALSE)
答案 2 :(得分:0)
这也是一种黑客攻击,但对其他美学更为普遍。它涉及倾倒美学,你不想做一个你想要的传奇。然后抓住那个传说。接下来,您绘制所需的绘图而没有图例。傻瓜边缘。在您想要的地块上注释您想要的图例。
library(reshape2)
library(gtable)
iris2 <- melt(iris, id.var = "Species")
myplot <-ggplot(iris2, aes(x = variable, y = value, group = Species)) +
# geom_point(aes(color = ifelse(value < 3, "type1", "type2"))) +
geom_line(aes(color = Species))
legend_line <- grobTree(gtable_filter(ggplot_gtable(ggplot_build(myplot)), "guide-box"))
ggplot(iris2, aes(x = variable, y = value, group = Species)) +
geom_point(aes(color = ifelse(value < 3, "type1", "type2"))) +
geom_line(aes(color = Species)) +
guides(color=FALSE) +
theme(plot.margin=unit(c(1,4,1,1),"cm")) +
annotation_custom(grob = legend_line, xmin = 4, xmax = 6.5,
ymin = 3.5, ymax = 4.5)