#r #ggplot2 #boxplot
Вопрос:
Я намерен создать диаграмму с функцией коробочной диаграммы для тех данных, которые сгруппированы по годам и по другому фактору (называемому статусом). Мой набор данных находится во фрейме данных imf.cas
и состоит из следующих записей:
country_iso_code year value status
AFG 2019 11.705 Surplus
AFG 2020 10.712 Surplus
FRA 2019 -0.667 Mixed
FRA 2020 -2.337 Mixed
USA 2019 -2.241 Deficit
USA 2020 -3.088 Deficit
В начале мой код был:
ggplot(data = imf.cas, aes(x=year, y=value, group=year, fill=status))
geom_boxplot(outlier.shape = 1, outlier.color = "grey")
coord_cartesian(ylim = c(-25,25))
labs(x = "", y="(% of GDP)")
Это привело к следующему виду диаграммы, который, похоже, игнорирует мою команду fill=status
:
Затем я расширил свой код следующим образом, пытаясь проверить fill=status
, работает ли он:
ggplot(data = imf.cas, aes(x=year, y=value, group=year, fill=status))
geom_boxplot(outlier.shape = 1, outlier.color = "grey")
coord_cartesian(ylim = c(-25,25))
labs(x = "", y="(% of GDP)")
facet_wrap(~status,ncol = 3)
theme(axis.title.y = element_text(size = 9),
legend.title = element_blank(),
legend.background=element_blank(),
legend.position = "bottom", plot.caption = element_text(hjust = 0, size = 8))
Действительно, это сработало, поскольку полученная диаграмма показывает разницу данных по столбцам состояния:
Я изо всех сил пытаюсь понять, почему мой исходный код не отображал данные в столбце «Разбивка по статусу». Любая помощь очень ценится!
P.S. В расширенной версии кода geom_smooth()
добавлена команда (ниже). Однако линии сглаживания не видны для каждой из трех частей диаграммы (ниже). Почему?
ggplot(data = df, aes(x=year, y=value, group = interaction(year, status), fill=status))
geom_boxplot(outlier.shape = 1, outlier.color = "grey")
geom_smooth(data = df, aes(x=year, y=value), method = "loess", se=TRUE, color = "orange")
coord_cartesian(ylim = c(min(lims$min),max(lims$max)))
labs(x = "", y="(% of GDP)")
facet_wrap(~status, ncol = 3)
theme(axis.title.y = element_text(size = 9),
legend.title = element_blank(),
legend.background=element_blank(),
legend.position = "bottom", plot.caption = element_text(hjust = 0, size = 8))
Комментарии:
1. Вам нужно будет сгруппироваться как по году, так и по статусу, чтобы в год было 3 поля, по одному для каждого статуса. Поэтому попробуйте
group = interaction(year, status)
в первой строке вашего кода ggplot2. Большое спасибо! Это хорошо работает таким образом.