BMI - индекс массы тела,
\[ BMI = \frac{вес}{рост^2} *10000 \]
d <- aggregate(ess7$BMI,
list(country = ess7$cntry),
mean,
na.rm = T)
ggplot(d,
aes(x = country,
y = x
)
)+
geom_col()
ggplot(d2, aes(x = x, # значения x и y поменялись местами
y = cntry,
fill = rural,
label = round(x),
group = rural
)
)+
geom_col(position = position_dodge(width = 1)) +
geom_text(size = 2.5,
position = position_dodge(width = 1))+
labs(x = "индекс массы тела",
y = "",
fill = "Тип места проживания")+
theme_minimal()
alcwkdy + alcwknd
в каждой из стран ESS. Предварительно добавьте туда непьющих, указав, что они употребляют 0 грамм mydata$alcohol[mydata$alcfreq ==7] <- 0
. Сделайте колонки синими. Для вычисления средних используйте aggregate()
ess7$alcohol <- ess7$alcwkdy + ess7$alcwknd
ess7$alcohol[ess7$alcfreq == 7] <- 0
d <- aggregate(ess7$alcohol,
list(country = ess7$cntry),
mean,
na.rm = T)
ggplot(d, aes(x=country, y = x))+
geom_col(fill = "darkblue")
d$country.sorted <- factor(d$country,
levels = d$country[order(d$x)])
ggplot(d, aes(x=country.sorted, y = x))+
geom_col(fill = "darkblue")
geom_label()
.ggplot(d, aes(x=country.sorted, y = x, label = round(x, 1)))+
geom_col(fill = "darkblue")+
geom_label()
Добавьте к этому графику разбивку по гендеру. Для этого придется заново пересчитать средние, рассчитав их отдельно для каждого гендера и введя гендер как переменную заливки (fill).
Попробуйте упорядочить страны по количеству выпиваемого мужчинами.
d <- aggregate(ess7$alcohol,
list(country = ess7$cntry,
gender = ess7$gender),
mean,
na.rm = T)
d$country.sorted <- factor(d$country,
levels = d$country[order(d$x[d$gender=="Male"])])
ggplot(d, aes(x=country.sorted,
y = x,
label = round(x, 1),
fill = gender
))+
geom_col(position = "dodge")+
geom_label()
ggplot(d, aes(y=country.sorted,
x = x,
label = round(x, 1),
fill = gender
))+
geom_col(position = "dodge")+
geom_label()
scale_fill_manual()
ggplot(d, aes(y=country.sorted,
x = x,
label = round(x, 1),
fill = gender
))+
geom_col(position = "dodge")+
geom_label()+
scale_fill_manual(values = c("darkgreen", "orange"))
labs()
) и примените одну из автоматических тем, например, theme_minimal()
Любая функция начинающаяся со stat_
вычисляет данные “на лету”, прямо изнутри ggplot. Он может быть приписан одному из нескольких “геомов”. Он создает внутренние переменные, т.е. результаты расчетов. В случае stat_bin
вычисляется переменная stat(count)
, которая может быть использована в других функциях внутри кода ggplot. К ней можно обращаться изнутри функции через stat(count)
.
Просто добавим аргумент fill
и position
.
Постройте график плотности переменной alcohol
с разбивкой по гендеру
AT$tvtot <- factor(AT$tvtot)
ggplot(AT, aes(x=tvtot))+
geom_bar()+
geom_label(stat = "count", aes(y = stat(count), label = stat(count)))
ggplot(AT, aes(tvtot, fill = as.factor(domicil) ))+
geom_bar(position = "fill")+ # fill здесь приводит к тому, что столбики растягиваются по всей оси y, преобразуясь таким образом в проценты
scale_x_discrete(na.translate=F)+
scale_y_continuous(labels = scales::percent) # эта строка просто меняет подписи по оси y на проценты
alcfreq
). Чтобы избавиться от категории NA
, добавьте строку scale_x_discrete(na.translate = F)
ggplot(AT, aes(x=as.factor(alcfreq)))+
geom_bar()+
geom_label(stat = "count",
aes(y = stat(count),
label = stat(count))
)
Двухмерный график плотности распределения (см. https://en.wikipedia.org/wiki/Multivariate_kernel_density_estimation). Показывает сгущения в двумерном пространстве.
Делит систему координат на одинаковые квадраты и подсчитывает сколько случаев попадает в каждый из них.
Медиана, коробка 25% и 75% квантиль, усы ±1.5 межквартильных разброса.
Показывает графики плотности, которые более информативны, чем коробки с усами.
Постройте график совместного распределения переменных alcohol
и icpart1
(живет с мужем/женой/партнером == 1).
cgtsday
). Предварительно добавьте туда некурящих, указав что они курят 0 сигарет: mydata$cgtsday[mydata$cgtsmke > 2] <- 0
.method = 'lm'
для отображения линейной связи и method ='loess'
для нелинейной связи. Уместите обе линии на одном графике.ess7$cgtsday[ess7$cgtsmke > 2] <- 0
d <- aggregate(ess7[, c('alcohol', "cgtsday")],
list(country = ess7$cntry),
mean,
na.rm = T)
d$highlight <- d$country == "HU" | d$country == "AT"
ggplot(d, aes(x = alcohol,
y = cgtsday,
label = country))+
geom_point(aes(color = highlight))+
geom_label(aes(fill = highlight), nudge_x = 4)+
geom_smooth(method ='loess', color = "blue")+
geom_smooth(method ='lm', color = "red")+
scale_color_manual(values = c("black", "red"),
labels = c("the rest", "Top smoking"))+
scale_fill_manual( values = c("grey", "red"),
labels = c("the rest", "Top smoking"))
esquisse
, функция . Для этого сохраните график в объект и используйте функцию ggplot_to_ppt()
# подсчитываем средние
d.mean <- aggregate(ess7$BMI,
list(country = ess7$cntry),
mean,
na.rm = T)
# подсчитываем стандартные ошибки средних
d.se <- aggregate(ess7$BMI,
list(country = ess7$cntry),
function(x) sd(x, na.rm=T)/sqrt(length(na.omit(x)))
)
# объединяем два массива
d <- merge(d.mean, d.se, by = "country")
# присваиваем понятные имена
names(d) <- c("country", "mean", "se")
# вычисляем доверительные интервалы (1.96 - это критическое значение для 95% доверительного интервала)
d$ci.upper <- d$mean + d$se * 1.96
d$ci.lower <- d$mean - d$se * 1.96
# упорядочиваем уровни в переменной country
d$country <- reorder(d$country, d$mean)
# строим график
ggplot(d, aes( y = country ,
x = mean,
xmin = ci.lower,
xmax = ci.upper,
label = round(mean,1)))+
geom_errorbarh()+ # этот геом добавит горизонтальные линии, соответствующие доверительным интервалам
geom_point()+
geom_text(nudge_y=.4, size = 2.5)
Постройте график среднего количества выпитого, с доверительными интервалами средних.
# подсчитываем средние
d.mean <- aggregate(ess7$alcohol,
list(country = ess7$cntry),
mean,
na.rm = T)
# подсчитываем стандартные ошибки средних
d.se <- aggregate(ess7$alcohol,
list(country = ess7$cntry),
function(x) sd(x, na.rm=T)/sqrt(length(na.omit(x)))
)
# объединяем два массива
d <- merge(d.mean, d.se, by = "country")
# присваиваем понятные имена
names(d) <- c("country", "mean", "se")
# вычисляем доверительные интервалы (1.96 - это критическое значение для 95% доверительного интервала)
d$ci.upper <- d$mean + d$se * 1.96
d$ci.lower <- d$mean - d$se * 1.96
# упорядочиваем уровни в переменной country
d$country <- reorder(d$country, d$mean)
# строим график
ggplot(d, aes( y = country ,
x = mean,
xmin = ci.lower,
xmax = ci.upper))+
geom_errorbarh()+ # этот геом добавить горизонатльные линии, соответствующие доверительным интервалам
geom_point()