"Aesthetics must be either length 1" 具有不同的 x、y 和颜色参数
"Aesthetics must be either length 1" with different x, y and colour arguments
我有一个应该很容易解决的问题,但我还没有找到任何直接适用于我的情况的答案。
我正在尝试使用 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")
我有一个应该很容易解决的问题,但我还没有找到任何直接适用于我的情况的答案。
我正在尝试使用 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")