"Эстетика должна быть длиной 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")
Это дает приложенный график.
Я хочу показать только те строки на моем графике geom_point, где n_test равно "p". Итак, тот же график, только с синими точками. Я пробовал использовать
ntest %>%
filter(n_test=="p")
перед ggplot, но это приводит к:
"Ошибка: эстетика должна быть либо длиной 1, либо такой же, как data (3): x"
Любая помощь будет принята с благодарностью.
1 ответ
Проблема в том, что вы не делаете
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")