我需要在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))
我需要在图表中添加蓝色和红色点的图例。
谢谢!
答案 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
。
编辑:我注意到你在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"))