微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“美学必须为长度1”,并带有不同的x,y和颜色参数

如何解决“美学必须为长度1”,并带有不同的x,y和颜色参数

我有一个应该很容易解决的问题,但没有找到直接适用于我的情况的答案。

我正在尝试使用geom_point创建一个绘图,其中显示的点是来自字符向量的过滤值。 y是连续数字,x是日期,fill是字符向量。

这是我的示例数据:

year    month   day attempt n_test
2019    6   22  1   NA
2019    7   13  2   n
2019    8   3   3   n
2019    8   20  4   n
2019    9   3   5   n
2019    9   4   6   n
2019    9   8   7   n
2019    9   11  8   p
2019    9   17  9   n
2019    10  3   10  n
2019    10  3   11  n
2019    10  11  12  c
2019    10  22  13  n
2019    10  25  14  n
2019    10  28  15  p
2019    11  6   16  c
2019    11  9   17  n
2019    11  25  18  n
2019    12  4   19  n
2019    12  8   20  n
2019    12  14  21  p
2019    12  17  22  n
2019    12  20  23  n

这称为“ ntest.csv”。

这是我的代码

ntest <- read.csv('ntest.csv',header = TRUE)
n_date <- ymd(paste(ntest$year,ntest$month,ntest$day,sep="-"))
ggplot(ntest,aes(n_date,y=attempt)) +
    geom_point(aes(colour = n_test),size = 3.5) +
    labs(x=NULL) +
    theme(legend.position="none",axis.text.x = element_text(color = "black",size = 10,angle=45),axis.text.y = element_text(color = "black",size = 10),axis.title.y = element_text(size = 13,vjust = 2)) +
    scale_x_date(date_breaks = "months",date_labels = "%b-%y")

这给出了附件图。

ntestplot

我只想在我的geom_point图中显示n_test等于“ p”的行。 因此,同一图只带有蓝点。 我尝试使用

ntest %>% 
filter(n_test=="p")

在ggplot之前,但这导致:

错误:美学的长度必须为1或与数据(3)相同:x”

任何帮助将不胜感激。

解决方法

这里的问题是您没有使n_date成为数据帧的一部分,因此在过滤数据帧时不会对其进行过滤,因此长度与此不同。解决方案只是将其创建为数据框中的一列:

ntest$n_date <- lubridate::ymd(paste(ntest$year,ntest$month,ntest$day,sep="-"))

现在您可以应用滤镜,您的绘图将起作用(请注意,这些点是红色的,因为现在只有一个颜色组):

ggplot(ntest %>% filter(n_test == "p"),aes(n_date,y=attempt)) +
    geom_point(aes(colour = n_test),size = 3.5) +
    labs(x=NULL) +
    theme(legend.position="none",axis.text.x = element_text(color = "black",size = 10,angle=45),axis.text.y = element_text(color = "black",size = 10),axis.title.y = element_text(size = 13,vjust = 2)) +
    scale_x_date(date_breaks = "months",date_labels = "%b-%y")

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。