我正在尝试使用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)
无济于事。
答案 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
请注意aes(..., group = variable)
告诉ggplot2
哪个数据点属于一个组,并且应该通过一行连接。