我有一个包含2列的数据框:date和var1。
现在,我想在ggplot中绘制这两个变量,并用geom_rug()
添加小行。
df<-tibble(date=lubridate::today() -0:14,
var1= c(1,2.5,NA,3,NA,6.5,1,NA,3,2,NA,7,3,NA,1))
df%>%ggplot(aes(x=date,y=var1))+
geom_point()+
geom_rug(sides = "tr",outside = T) +
# Need to turn clipping off if rug is outside plot area
coord_cartesian(clip = "off")
这是我的情节:
但是我的问题是var1
的细线在左侧。我想把它们放在顶部。
使用参数sides=
,您可以更改小行的布置,如下所示:
df%>%ggplot(aes(x=date,y=var1))+
geom_point()+
geom_rug(sides = "t",outside = T) +
# Need to turn clipping off if rug is outside plot area
coord_cartesian(clip = "off")
但是在此示例中,细线代表date
而不是var1
。 (var1
只有10个值,但有15条小线)
有人可以帮助我,如何反转geom_rug
元素并避免此问题?
答案 0 :(得分:3)
您在df$var
和df$date
中确实有15行。在前者中,有5个是NA
。
一种解决方法是定义一个有限的数据集,该数据集仅包含与绘制内容有关的信息(而不是NA
)。这应该提供给geom_rug
。使用complete.cases
,我们可以省略数据集中带有NA
的行。
您可以使用以下代码来完成所需的绘图
library(ggplot2)
library(tibble)
library(dplyr)
df %>% ggplot(aes(x = date, y = var1)) +
geom_point() +
geom_rug(data = df[complete.cases(df), ] , ## selected date: not NA
sides = "lt",
outside = TRUE) +
coord_cartesian(clip = "off")
请让我知道这是否是您想要的。
答案 1 :(得分:2)
如果要在绘图时删除所有带有NA值的个案,另一种选择是使用ggplot2 remove_missing()
函数:
df %>% ggplot(data = remove_missing(.), mapping = aes(x=date,y=var1))+
geom_point()+
geom_rug(sides = "t",outside = T) +
coord_cartesian(clip = "off")