class: center, middle, inverse, title-slide .title[ # Визуализация данных в R ] .subtitle[ ## Дополнительные материалы с плохими примерами ] .author[ ### Анастасия Жарикова ] .date[ ### 16.12.2022 ] --- # Gapminder ```r library(gapminder) head(gapminder) ``` ``` # A tibble: 6 × 6 country continent year lifeExp pop gdpPercap <fct> <fct> <int> <dbl> <int> <dbl> 1 Afghanistan Asia 1952 28.8 8425333 779. 2 Afghanistan Asia 1957 30.3 9240934 821. 3 Afghanistan Asia 1962 32.0 10267083 853. 4 Afghanistan Asia 1967 34.0 11537966 836. 5 Afghanistan Asia 1972 36.1 13079460 740. 6 Afghanistan Asia 1977 38.4 14880372 786. ``` --- # Используйте темы ```r library(patchwork) p <- ggplot(gapminder) + geom_point(aes(x = gdpPercap, y = lifeExp)) p ``` <img src="data:image/png;base64,#figs/unnamed-chunk-2-1.png" width="80%" style="display: block; margin: auto;" /> --- # Темы бывают разные ```r p1 <- p + theme_classic() p2 <- p + theme_bw() p1 + p2 ``` <img src="data:image/png;base64,#figs/unnamed-chunk-3-1.png" width="80%" style="display: block; margin: auto;" /> --- # Подписи Графики должны иметь названия Оси должны быть подписаны адекватно, а не по названиям столбцов Единицы измерений указывать обязательно Единицы измерений должны быть удобны для чтения Размер текстовых элементов графика необходимо подобрать Избегайте излишних подписей осей в панелях картинок https://ggplot2.tidyverse.org/reference/ggtheme.html --- # "Умный" zoom Что вы об этом помните? --- # Логарифмирование ```r lg2 <- ggplot(gapminder) + geom_point(aes(x = log2(gdpPercap), y = lifeExp)) lg10 <- ggplot(gapminder) + geom_point(aes(x = log10(gdpPercap), y = lifeExp)) lg2 + lg10 ``` <img src="data:image/png;base64,#figs/unnamed-chunk-4-1.png" width="80%" style="display: block; margin: auto;" /> Что сделать с левым графиком? --- # Уточнение засечек на осях ```r lg2 + scale_x_continuous(breaks=seq(6,20,2)) ``` <img src="data:image/png;base64,#figs/unnamed-chunk-5-1.png" width="80%" style="display: block; margin: auto;" /> --- # Где плотность выше? ```r ggplot(gapminder) + geom_point(aes(x = log2(gdpPercap), y = lifeExp), alpha = 0.2, size = 2) ``` <img src="data:image/png;base64,#figs/unnamed-chunk-6-1.png" width="80%" style="display: block; margin: auto;" /> --- # Изучаем разнообразие ```r length(unique(gapminder$country)) ``` ``` [1] 142 ``` ```r length(unique(gapminder$continent)) ``` ``` [1] 5 ``` --- # Описываем разнообразие ```r table(gapminder$continent) ``` ``` Africa Americas Asia Europe Oceania 624 300 396 360 24 ``` --- # Визуализируем разнообразие ```r ggplot(gapminder) + geom_bar(aes(y = continent)) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-9-1.png" width="80%" style="display: block; margin: auto;" /> --- # Визуализируем разнообразие ```r gapminder %>% count(continent) %>% mutate(pct = prop.table(n)) %>% ggplot(aes(x = continent, y = n, label = scales::percent(pct))) + geom_col(position = 'dodge') + geom_text(position = position_dodge(width = .9), vjust = -0.5, size = 3) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-10-1.png" width="80%" style="display: block; margin: auto;" /> --- # Визуализируем разнообразие Как переставить столбцы местами? Что делать, если подписи не влезают в поле? --- # Добавляем третью "ось" ```r ggplot(gapminder) + geom_point(aes(x = log2(gdpPercap), y = lifeExp, colour = continent), alpha = 0.5, size = 2) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-11-1.png" width="80%" style="display: block; margin: auto;" /> --- # Добавляем третью "ось" ```r ggplot(gapminder) + geom_point(aes(x = log2(gdpPercap), y = lifeExp, fill = continent), alpha = 0.6, size = 2, shape = 21, color = 'black') + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-12-1.png" width="80%" style="display: block; margin: auto;" /> --- # Добавляем третью "ось" ```r ggplot(gapminder) + geom_point(aes(x = log2(gdpPercap), y = lifeExp, colour = country), alpha = 0.2, size = 2) + theme_bw() + theme(legend.position = "none") ``` <img src="data:image/png;base64,#figs/unnamed-chunk-13-1.png" width="80%" style="display: block; margin: auto;" /> --- # Изучаем разнообразие ```r ggplot(gapminder) + geom_boxplot(aes(x = continent, y = log10(gdpPercap))) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-14-1.png" width="80%" style="display: block; margin: auto;" /> --- # Изучаем разнообразие ```r ggplot(gapminder) + geom_boxplot(aes(x = country, y = log10(gdpPercap))) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-15-1.png" width="80%" style="display: block; margin: auto;" /> Почему плохо? --- # Используйте цвета обоснованно ```r ggplot(gapminder) + geom_boxplot(aes(x = continent, y = log10(gdpPercap), fill = continent)) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-16-1.png" width="80%" style="display: block; margin: auto;" /> --- # Используйте цвета обоснованно ```r ggplot(gapminder) + geom_boxplot(aes(x = continent, y = log10(gdpPercap)), fill = '#00afb9') + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-17-1.png" width="80%" style="display: block; margin: auto;" /> --- # Все надписи долдны быть читаемыми ```r ggplot(gapminder) + geom_boxplot(aes(x = continent, y = log10(gdpPercap)), fill = '#00afb9') + theme_bw() + theme(axis.text=element_text(size=14)) + xlab("") + scale_x_discrete(guide = guide_axis(n.dodge = 2)) ``` <img src="data:image/png;base64,#figs/unnamed-chunk-18-1.png" width="80%" style="display: block; margin: auto;" /> --- # Оцениваем разнообразие ```r gapminder %>% group_by(continent) %>% summarise(lifeExp_med = median(lifeExp)) %>% ungroup() %>% mutate(type = case_when(lifeExp_med > median(gapminder$lifeExp) ~ 'UP', TRUE ~ 'DOWN')) %>% ggplot(aes(x = continent, y = lifeExp_med, fill = type)) + geom_col(position = 'dodge') + geom_hline(yintercept=median(gapminder$lifeExp)) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-19-1.png" width="80%" style="display: block; margin: auto;" /> --- # Оцениваем отношение ```r iris %>% ggplot(aes(x = Sepal.Length, y = Petal.Length, color = Species)) + geom_point() + geom_abline(intercept = 0, slope = 1) + theme_bw() ``` <img src="data:image/png;base64,#figs/unnamed-chunk-20-1.png" width="80%" style="display: block; margin: auto;" /> --- # Размерность осей ```r set.seed(19191) data <- data.frame(x = c(rnorm(500), rnorm(5000, 10, 5)), group = as.factor(c(rep(1, 500), rep(2, 5000)))) ``` --- # Что здесь не так? ```r data %>% filter(group == 1) %>% ggplot(aes(x = x)) + geom_histogram(position = "identity") + theme_bw() -> p1 data %>% filter(group == 2) %>% ggplot(aes(x = x)) + geom_histogram(position = "identity") + theme_bw() -> p2 p1 + p2 ``` <img src="data:image/png;base64,#figs/unnamed-chunk-22-1.png" width="80%" style="display: block; margin: auto;" /> --- # Что здесь не так? <img src="data:image/png;base64,#img/photo_2022-12-16_16-24-19.jpg" width="80%" style="display: block; margin: auto;" /> https://www.hindawi.com/journals/amse/2022/3802603/ --- # Больше графиков! https://r-graph-gallery.com/index.html --- # Еще больше графиков! https://r-charts.com/miscellaneous/ggcats/ https://r-charts.com/miscellaneous/geomlime/ --- # Работа с геномными интервалами https://kodomo.fbb.msu.ru/FBB/year_18/ppt/gen_int.pdf