使用geom_point添加图例

时间:2017-11-07 16:12:02

标签: r ggplot2 legend

我需要在geom_line图表中添加一些geom_point的图例。例子如下。

require(dplyr)
require(ggplot2)
set.seed(1111)

我的对象

Sum <- sample(1:50, 10)
year <- c(1990:1999)
index.one <- sample(0:1, 10,replace=TRUE)
index.two <- sample(0:1, 10,replace=TRUE)

df <- data_frame(Sum, year, index.one, index.two)

图形

graph <- ggplot(df, aes(x=year,y=Sum))+ geom_line() +
geom_point(data=df[df$index.one==1,], aes(x=year, y=Sum), colour="red", 
fill="red", shape=22) +
geom_point(data=df[df$index.two==1,], aes(x=year, y=Sum), colour="blue", 
fill="blue", shape=22) +
scale_x_continuous(breaks = seq(1990,1999, by=1))

graph

我需要在图表中添加蓝色和红色点的图例。

谢谢!

2 个答案:

答案 0 :(得分:1)

您无需为每种颜色添加geom。颜色是一种美学,你连接到变量,在你的情况index.one(或.two,但它们混淆)。

您的示例有点棘手,因为您添加了geom_line。没问题,只需将审美添加到geom_point

ggplot(df, aes(x=year, y=Sum)) +
  geom_point(aes(colour=as.factor(index.one))) + geom_line() +
  scale_colour_manual(values=c(`1`='blue', `0`='red'))

此外,由于index.one是数字,ggplot2会尝试将其用作连续变量,但它实际上是离散的,因此as.factor

enter image description here

编辑:我注意到你在1995年没有任何观点。只需将相应年份的index.one中的值替换为NA,然后点不会被绘制。它不会影响该行,因为它从另一个变量中获取值。

答案 1 :(得分:0)

这使用tidyr::gather()来创建一个长数据集,然后过滤那些只绘制值等于1的点的点。

library(tidyr)
df1 <- gather(df, index, value, 3:4)
ggplot(df1, aes(x = year, y = Sum)) + 
  geom_line() + 
  geom_point(data = df1 %>% filter(value == 1), 
             aes(colour = index, fill = index), shape = 22) + 
  scale_x_continuous(breaks = seq(1990,1999, by=1)) + 
  scale_fill_manual(values = c("red", "blue")) + 
  scale_colour_manual(values = c("red", "blue"))