Визуализация данных в пакете ggplot2

Карен Аванесян
Октябрь 2018, Ростов-на-Дону

Академия Психологии и Педагогики ЮФУ

Гистограмма (1)

Визуализацию данных мы начнем с гистограммы - графика, показывающего распределение в количественных переменных.

library(haven)
library(ggplot2)
essru <- read_sav("ESS8RU.sav")

Бар-чарты (1)

essru$edlvdru <- factor(essru$edlvdru, ordered = T, levels = c(1:11), labels = c("Не учился", "Начальное", "Неполное среднее","Среднее", "Начальное Проф1", "Начальное проф2", "Среднее Проф", "Бакалавр", "Магистр", "Специалист", "Ученая степень" ))
library(scales)
ggplot(data=essru, aes(x=edlvdru, fill = edlvdru)) + 
      geom_bar(aes(y = (..count..)/sum(..count..)), show.legend = F)+
    scale_y_continuous(labels = percent)+
    xlab("Уровень образования")+
    ylab("Percentage")

Бар-чарты (2)

plot of chunk unnamed-chunk-4

Гистограммы в ggplot2 (1)

ggplot2 - один из наиболее популярных пакетов по визуализации данных. Мы преимущественно будем использовать его и попробуем построить гистограмму

library(ggplot2)
# Basic histogram
ggplot(essru, aes(x=agea))+
geom_histogram(binwidth=2, color="black", fill="cyan")+
    xlab("Возраст")+
    ggtitle("Гистограмма")+
    theme(plot.title = element_text(hjust = 0.5))

Гистограммы в ggplot2 (2)

plot of chunk unnamed-chunk-6

Гистограммы в ggplot2 (3)

Добавим к графику линию, указывающую на среднее

library(ggplot2)
# Basic histogram
ggplot(essru, aes(x=agea))+
geom_histogram(binwidth=2, color="black", fill="steelblue3")+
    xlab("Возраст")+
    ggtitle("Гистограмма")+
    theme(plot.title = element_text(hjust = 0.5))+
    geom_vline(aes(xintercept=mean(agea)),
            color="blue", linetype="dashed", size=1)

Гистограммы в ggplot2 (4)

plot of chunk unnamed-chunk-8

Гистограммы в ggplot2 (5)

ggplot(essru, aes(x=agea))+
    geom_histogram(aes(y=..density..), colour="black", fill="white", binwidth=2)+
    geom_density(alpha=.2, fill="#FF6666") 

Гистограммы в ggplot2 (6)

plot of chunk unnamed-chunk-10

График функции плотности вероятности (Density Plots) в ggplot2 (1)

Подсчитать среднее для каждой группы

library(plyr)
mu <- ddply(essru, "gndr", summarise, grp.mean=mean(agea))
head(mu)
  gndr grp.mean
1    1 42.87753
2    2 49.59584

График функции плотности вероятности (Density Plots) в ggplot2 (2)

ggplot(essru, aes(x=agea, fill=gndr)) + #разница между color и fill
  geom_density(alpha = 0.4, size = 0.4)+
  geom_vline(data=mu, aes(xintercept=grp.mean, color=gndr))+
  scale_color_brewer(palette="Dark2")

График функции плотности вероятности (Density Plots) в ggplot2 (3)

graph

Быстрые публикации в ggpubr (1)

Pisa_Russia_2015 <- read_sav("Pisa Russia 2015.sav")
Pisa_Russia_2015$add_learn_math <- Pisa_Russia_2015$ST071Q02NA
Pisa_Russia_2015$gender <- Pisa_Russia_2015$ST004D01T
Pisa_Russia_2015$gender <- factor(Pisa_Russia_2015$ST004D01T, labels = c("female", "male"), levels = c(1,2))

library(ggpubr)
library(gridExtra)

Быстрые публикации в ggpubr (2)

# Создать Density plot 
density.p <- ggdensity(Pisa_Russia_2015, x = "add_learn_math", 
                       fill = "gender")

# Произвести расчет дескриптивной статистики по группам
stable <- desc_statby(Pisa_Russia_2015, measure.var = "add_learn_math",
                      grps = "gender")
stable <- stable[, c("gender", "length","min", "mean", "max", "sd")] #извлекаем необходимые элементы дескриптивной статистики из полученного ряда данных
# Summary table plot, medium orange theme
stable.p <- ggtexttable(stable, rows = NULL, 
                        theme = ttheme("mOrange"))

Быстрые публикации в ggpubr (3)

# Написать текст
text <- paste("Данные лонгитюдного исследования PISA",
              "относительно внеаудиторных дополнительных",
              "занятий по математике выявили,",
              "что в России школьники старших классов",
              "мужского пола в среднем тратят на данный вид активности больше", 
              "чем студенты женского пола", sep = " ")
text.p <- ggparagraph(text = text, face = "italic", size = 11, color = "black")
# Расположить график, таблицу и текст на одной странице
grid.arrange(density.p, stable.p, text.p, ncol = 1, nrow = 3, heights = c(1, 0.5, 0.3))

plot of chunk unnamed-chunk-15

Быстрые публикации в ggpubr (4)

graph

Ящиковые диаграммы в ggplot2 (1)

ggplot(data = essru, aes(x = edlvdru,y = agea, fill = edlvdru))+
geom_boxplot()+
    theme(axis.text.x=element_blank(),plot.title = element_text(hjust = 0.5))+
    xlab("Уровень Образования")+
    ylab("Возраст")+
    ggtitle("Ящиковая Диаграмма")

Ящиковые диаграммы в ggplot2 (2)

graph

Скрипичные диаграммы (Violin Plots) (1)

ggplot(data = Pisa_Russia_2015, aes(x = gender, y = add_learn_math))+
    geom_violin(trim = FALSE, fill = "red", col = "blue", alpha = 0.5, size = 0.5)

Задание: добавьте к данному графику названия для осей х, у и дайте ему название.

Скрипичные диаграммы (Violin Plots) (2)

plot of chunk unnamed-chunk-18