#r #ggplot2 #time-series
#r #ggplot2 #временные ряды
Вопрос:
Мои данные представляют собой запись результатов исследования. Она содержит две группы (group1 и group2), три результата (положительный, нейтральный и отрицательный). Кроме того, это набор данных временных рядов, поэтому он имеет переменную даты (day1, day2, …)
Вот пример моих данных:
Book1 %>% head(n=20)
# A tibble: 20 x 4
No Group Result date
<dbl> <dbl> <chr> <chr>
1 1 1 positive day1
2 2 1 neutral day1
3 3 1 neutral day1
4 4 2 negative day1
5 5 2 positive day1
6 6 2 neutral day1
7 7 1 neutral day1
8 8 1 negative day1
9 9 1 positive day1
10 10 2 neutral day1
11 11 1 neutral day2
12 12 1 negative day2
13 13 1 positive day2
14 14 2 neutral day2
15 15 2 neutral day2
16 16 2 negative day2
17 17 1 positive day2
18 18 1 positive day2
19 19 1 positive day2
20 20 2 positive day2
Я планирую нарисовать линейную диаграмму для сравнения скорости результата (положительной скорости, нейтральной скорости и отрицательной скорости) между двумя группами, поэтому мой код:
Book1 %>%
ggplot(aes(x = Date, y = (..count..)/sum(..count..), fill = Group))
geom_line(stat = "count")
facet_grid(Result~.)
Тем не менее, я получаю много предупреждающей информации:
geom_path: Each group consists of only one
observation. Do you need to adjust the group
aesthetic?
и график ничего не содержит. вот график:
введите описание изображения здесь
Я не знаю, почему я получаю этот результат и как это сделать, чтобы получить правильный график.
Комментарии:
1. Имя столбца не совпадает, т.Е. Оно должно быть
date
вместоDate
2. Когда вы выполняете суммирование, для каждой группы будет одно значение. Вам нужно
geom_col
вместоgeom_line
Ответ №1:
geom_line
ожидается более одного наблюдения. После суммирования в каждой группе будет один элемент. Вместо geom_line
, geom_col
или geom_bar
было бы полезно
library(dplyr)
library(ggplot2)
Book1 %>%
group_by(date, Group = factor(Group), Result) %>%
summarise(value = n(), .groups = 'drop') %>%
mutate(perc = value/sum(value)) %>%
ggplot(aes(x = date, y = perc, fill = Group))
geom_col()
facet_grid(~ Result)
-вывод
Или, если мы используем ..count..
Book1 %>%
mutate(Group = factor(Group)) %>%
ggplot(aes(x = date))
geom_bar(aes(y = (..count..)/sum(..count..), fill = Group))
facet_grid(~ Result)
-вывод
данные
Book1 <- structure(list(No = 1:20, Group = c(1L, 1L, 1L, 2L, 2L, 2L, 1L,
1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L), Result = c("positive",
"neutral", "neutral", "negative", "positive", "neutral", "neutral",
"negative", "positive", "neutral", "neutral", "negative", "positive",
"neutral", "neutral", "negative", "positive", "positive", "positive",
"positive"), date = c("day1", "day1", "day1", "day1", "day1",
"day1", "day1", "day1", "day1", "day1", "day2", "day2", "day2",
"day2", "day2", "day2", "day2", "day2", "day2", "day2")),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17", "18", "19", "20"))
Ответ №2:
Линейный график возможен и зависит от того, как вы набрасываете сводки для своих данных. Вы можете увидеть эволюцию по дням для каждой группы, используя код этого стиля:
library(ggplot2)
library(dplyr)
#Code
df %>% group_by(Group,Result,date) %>%
summarise(N=n()) %>%
ggplot(aes(x=date,y=N,group=Result,color=Result))
geom_line(size=1)
geom_point(size=1)
scale_y_continuous(limits = c(0,NA))
facet_grid(.~Group)
theme_bw()
theme(axis.text = element_text(color='black',face='bold'),
axis.title = element_text(color='black',face='bold'),
strip.text = element_text(color='black',face='bold'),
legend.title = element_text(color='black',face='bold'),
legend.text = element_text(color='black',face='bold'))
Вывод:
Это действительно интересный подход, использующий линии, чтобы увидеть, как меняются тенденции в результатах.
Некоторые используемые данные:
#Data
df <- structure(list(No = 1:20, Group = c(1L, 1L, 1L, 2L, 2L, 2L, 1L,
1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L), Result = c("positive",
"neutral", "neutral", "negative", "positive", "neutral", "neutral",
"negative", "positive", "neutral", "neutral", "negative", "positive",
"neutral", "neutral", "negative", "positive", "positive", "positive",
"positive"), date = c("day1", "day1", "day1", "day1", "day1",
"day1", "day1", "day1", "day1", "day1", "day2", "day2", "day2",
"day2", "day2", "day2", "day2", "day2", "day2", "day2")), class = "data.frame", row.names = c(NA,
-20L))
Или, используя проценты, вы можете попробовать:
#Code 2
df %>% group_by(Group,Result,date) %>%
summarise(N=n()) %>% ungroup() %>%
group_by(Group) %>% mutate(Perc=N/n()) %>%
ggplot(aes(x=date,y=Perc,group=Result,color=Result))
geom_line(size=1)
geom_point(size=1)
scale_y_continuous(limits = c(0,NA),labels = scales::percent)
facet_grid(.~Group)
theme_bw()
theme(axis.text = element_text(color='black',face='bold'),
axis.title = element_text(color='black',face='bold'),
strip.text = element_text(color='black',face='bold'),
legend.title = element_text(color='black',face='bold'),
legend.text = element_text(color='black',face='bold'))
Вывод:
Комментарии:
1. Спасибо, Дак. Ваш ответ настолько потрясающий!!
2. @Carlos Отлично! Надеюсь, это помогло вам!! Это был хороший вопрос для размышлений!