У меня есть следующий код, который генерирует следующие результаты:
years <- seq(1930, 2020, by = 10)
length(years)
years
labels <- paste(1 + years[-length(years)], years[-1], sep = "-")
length(labels)
labels
SP500 %>% mutate(decade = cut(SP500$Year,seq(1930,2020,by=10), labels = labels)) %>%
group_by(decade) %>% summarise(return = mean(`Annual\n% Change`))
# A tibble: 10 × 2
decade return
<fct> <dbl>
1 1931-1940 0.014
2 1941-1950 0.077
3 1951-1960 0.124
4 1961-1970 0.056
5 1971-1980 0.058
6 1981-1990 0.098
7 1991-2000 0.157
8 2001-2010 0.018
9 2011-2020 0.121
10 NA 0.04
и мой вопрос: как я могу поместить этот результат в гистограмму или линейную диаграмму? Я пытался сделать это в течение последних нескольких часов, но я продолжаю получать ошибки, хотя я чувствую, что ответ прост, кажется, что я просто не вижу его.
years <- seq(1930, 2020, by = 10)
length(years)
labels <- paste(1 + years[-length(years)], years[-1], sep = "-")
length(labels)
SP500 %>% mutate(decade = cut(SP500$Year,seq(1930,2020,by=10), labels = labels)) %>%
group_by(decade) %>% summarise(return = mean(`Annual\n% Change`)) %>%
ggplot(SP500, aes(x = decade, y = return)) +
geom_col()
Ошибка в ggplot()
:
! Отображение должно быть создано с помощью aes()
или aes_()
.
SP500 %>% ggplot(
ss <- SP500 %>% mutate(decade = cut(SP500$Year,seq(1930,2020,by=10))) %>%
group_by(decade) %>% summarise(return = mean(`Annual\n% Change`)), aes_(x=ss[,1], y= ss[,2])) + geom_line()
Спасибо заранее
Вы передаете результат своей обработки данных в ggplot, но также передаете имя фрейма данных в качестве первого аргумента в ggplot.
Помните, что делая
data_frame %>% ggplot(aes(x, y))
Это то же самое, что делать
ggplot(data = data_frame, mapping = aes(x, y))
Но делать
data_frame %>% ggplot(data_frame, aes(x, y))
Это то же самое, что делать
ggplot(data = data_frame, mapping = data_frame, aes(x, y))
И, конечно же, вы получаете ошибку, потому что не можете передать фрейм данных в аргумент mapping
.
Так что вы можете сделать
SP500 %>%
mutate(decade = cut(SP500$Year,seq(1930,2020,by=10), labels = labels)) %>%
group_by(decade) %>%
summarise(return = mean(`Annual\n% Change`)) %>%
ggplot(aes(x = decade, y = return)) +
geom_col()
или
SP500 <- SP500 %>%
mutate(decade = cut(SP500$Year,seq(1930,2020,by=10), labels = labels)) %>%
group_by(decade) %>%
summarise(return = mean(`Annual\n% Change`))
ggplot(SP500, aes(x = decade, y = return)) +
geom_col()
Оба из них приводят к:
Приведенный выше график был сделан со следующим кодом, который включает данные, взятые из вашего вопроса. Если вы скопируете и вставите этот блок кода в консоль R, он создаст тот же график:
SP500 <- structure(list(decade = structure(1:9, .Label = c("1931-1940",
"1941-1950", "1951-1960", "1961-1970", "1971-1980", "1981-1990",
"1991-2000", "2001-2010", "2011-2020"), class = "factor"), return = c(0.014,
0.077, 0.124, 0.056, 0.058, 0.098, 0.157, 0.018, 0.121)), row.names = c(NA,
-9L), class = c("tbl_df", "tbl", "data.frame"))
library(ggplot2)
ggplot(SP500, aes(decade, return)) + geom_col()
большое спасибо, это именно то, что я хотел. И большое спасибо за объяснение, теперь я лучше понимаю
В вашем первом
ggplot
коде вы передаете данные вggplot
, поэтому вы должны оставить первый аргумент вggplot
пустым (то есть аргументdata
). ПопробуйтеSP500 %>% mutate(decade = cut(SP500$Year,seq(1930,2020,by=10), labels = labels)) %>% group_by(decade) %>% summarise(return = mean(`Annual\n% Change`)) %>% ggplot(aes(x = decade, y = return)) + geom_col()