如何使用特定颜色ggplot两个变量和缺少值的图例

时间:2017-12-03 22:18:38

标签: r plot ggplot2 reshape2

我正在尝试使用ggplot2来绘制两个变量。变量具有不同的缺失值。 e.g:

       Date   Var1      Var2
3 2016-06-16        NA    NA
4 2016-06-17    0.0035 0.004
5 2016-06-18        NA    NA
6 2016-06-19    0.0825 0.083
7 2016-06-20    0.0890    NA
8 2016-06-21    0.1725 0.173

我想用geom_point()绘制这个点,并用虚线连接点,不要留下缺少数据的间隙,但也有一个图例,所以我有以下内容:

plot1 <- ggplot(mydata, aes(x=Date))

plot1 <- plot1 + geom_point(data= 
mydata[!is.na(mydata$Var1),],aes(y= Var1, colour = 
"Var1"), size =8, col = "navyblue") +
  geom_line(data= mydata[!is.na(mydata$Var1),],aes(y= Var1, 
group =1, colour = "Var1"), linetype = 6, lwd = 1, col = "navyblue") +
  geom_point(data = mydata[!is.na(mydata$Var2),], aes(y=cal5C, colour 
= "Var2"), size=8, col = "turquoise3") +
  geom_line(data = mydata[!is.na(mydata$Var2),],aes(y=Var2, group = 
1, colour = "Var2"), linetype =6, col = "turquoise3")

哪条线路很好地将两条线条绘制成所需的颜色,点和线连接,然后我可以调整主题等,使其看起来更漂亮。

但是传说没有显示 - 当我放弃我的颜色规范时它会出现,例如:

plot1 <- ggplot(mydata, aes(x=Date))
plot1 <- plot1 + geom_point(data= mydata[!is.na(mydata$Var1),],aes(y= 
Var1, colour = "Var1"), size =8) +
  geom_line(data= mydata[!is.na(mydata$Var1),],aes(y= Var1, group =1, 
 colour = "Var1"), linetype = 6, lwd = 1) +
  geom_point(data = mydata[!is.na(mydata$Var2),], aes(y=Var2, colour = 
"Var2"), size=8) +
  geom_line(data = mydata[!is.na(mydata$Var2),],aes(y=Var2, group = 1, 
colour = "Var2"), linetype =6)

但我不想在图表中使用预设颜色。我已经看到人们使用我尝试过的重塑包,但后来我不知道如何在点之间连接线 - 我最好的是连接所有点之间的线,这没用。

这就是我使用重塑和融化将其变成长格式的方法:

library(reshape2)
mydata2 <- mydata[,c(1,26,28)] #subsets into 3 columns Date, Var1, Va2
mydata.m <- melt(mydata2, id.vars=c("Date"))
head(mydata.m)
   Date  variable  value  
1 2016-06-16 Var1     NA  
2 2016-06-17 Var1  0.0035  
3 2016-06-18 Var1      NA  
4 2016-06-19 Var1  0.0825  
5 2016-06-20 Var1  0.0890  
6 2016-06-21 Var1  0.1725  

然后绘制它:

plot1 <- ggplot(mydata.m, 
            aes(x=Date, y=value, color=variable))
plot1 <- plot1 + geom_point() + geom_line()               
plot1 <- plot1 + scale_color_manual(name="", values = 
c("navyblue","turquoise3"))  

这只绘制了点,图例和正确的颜色,但我无法弄清楚如何让geom_line()工作 - 我尝试将mydata.m[!is.na(mydata.m$value), ]纳入geom_line()之后重塑,但它不起作用,geom_line(group = 2)无济于事。

1 个答案:

答案 0 :(得分:1)

函数complete.case()is.na()可用于从熔融数据集mydata.m中删除缺少值的行,但必须将其传递给data参数,例如,

plot1 <- ggplot(mydata.m[complete.cases(mydata.m), ], 
                aes(x = Date, y = value, color = variable, group = variable))

# or, using !is.na():
plot1 <- ggplot(mydata.m[!is.na(mydata.m$value), ], 
                aes(x = Date, y = value, color = variable, group = variable))

plot1 <- plot1 + geom_point() + geom_line()               
plot1 <- plot1 + scale_color_manual(name="", values = 
                                      c("navyblue","turquoise3")) 
plot1

enter image description here

请注意aes(..., group = variable)告诉ggplot2哪个数据点属于一个组,并且应该通过一行连接。