如何 ggplot 具有特定颜色的两个变量和具有缺失值的图例
How to ggplot two variables with a specific colour and legend with missing values
我正在尝试使用 ggplot2
随着时间的推移绘制两个变量。变量具有不同的缺失值。例如:
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)
但我不想为图表使用预设颜色。我见过有人使用我试过的 reshape 包,但我不确定如何让线连接到点之间——我拥有的最好的是线连接在所有点之间,这是没有用的。
这是我使用重塑和融化将其变成长格式的内容:
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)
无济于事。
可以使用函数 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
哪些数据点属于一组,应该用一条线连接。
我正在尝试使用 ggplot2
随着时间的推移绘制两个变量。变量具有不同的缺失值。例如:
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)
但我不想为图表使用预设颜色。我见过有人使用我试过的 reshape 包,但我不确定如何让线连接到点之间——我拥有的最好的是线连接在所有点之间,这是没有用的。
这是我使用重塑和融化将其变成长格式的内容:
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)
无济于事。
可以使用函数 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
哪些数据点属于一组,应该用一条线连接。