и его применение в биоинформатике
Лекция 4
Анна Валяева
22 сентября 2023
Данные из пакета palmerpenguins.
Artwork by @allison_horst
# A tibble: 344 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Adelie Torgersen 39.1 18.7 181 3750
2 Adelie Torgersen 39.5 17.4 186 3800
3 Adelie Torgersen 40.3 18 195 3250
4 Adelie Torgersen NA NA NA NA
5 Adelie Torgersen 36.7 19.3 193 3450
6 Adelie Torgersen 39.3 20.6 190 3650
7 Adelie Torgersen 38.9 17.8 181 3625
8 Adelie Torgersen 39.2 19.6 195 4675
9 Adelie Torgersen 34.1 18.1 193 3475
10 Adelie Torgersen 42 20.2 190 4250
# ℹ 334 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
+
# ОБЯЗАТЕЛЬНОЕ
ggplot(
data = <DATA>, # данные
mapping = aes(<MAPPINGS>)) + # переменные по осям X, Y, цвет...
<GEOM_FUNCTION>() + # тип графика
# ДОПОЛНИТЕЛЬНОЕ
<SCALE_FUNCTION>() + # трансформация осей
<COORDINATE_FUNCTION>() + # настройка системы координат
<FACET_FUNCTION>() + # разделение графика на панель
<THEME_FUNCTION>() # настройка оформления графика
В ggplot2 есть несколько встроенных тем для оформления графика:
theme_grey()
- стандартная серая темаtheme_bw()
theme_classic()
theme_void()
aes
scale_color_manual()
Цвета можно задать с помощью:
color()
color()[573]
rgb()
rgb(244/255, 164/255, 96/255)
colors()
Показаны первые 125 цветов из 657.
Один и тот же график можно создать, написав код по-разному.
aes
задает оси для всех геометрических функцийОдин и тот же график можно создать, написав код по-разному.
aes
задает оси только для точек - диаграммы разбросаaes
- aestheticsДля разных geom_
функциий набор доступных aes
разный.
Для geom_point()
:
shape
- тип символаcolor
- цвет общий / цвет обводкиfill
- заливкаsize
- размерstroke
- толщина обводкиalpha
- прозрачностьaes
переменные - из разных столбцовИ color
, и fill
для обводки и заливки.
Задать цвет вручную - scale_color_manual()
или scale_fill_manual()
.
element_text()
element_line()
element_rect(
После записи в файл, проверяйте, что все сохранилось правильно. Например, размеры итоговой картинки (height
и width
) могут не подходить для вашего графика - все либо будет слишком мелко, либо элементы будут наезжать друг на друга.
Если не указать plot = p
, то будет сохранен последний нарисованный/выведенный в консоль график.
Более универсальный вариант:
Либо сохраняйте вручную из RStudio.
В панели Plots: Export -> Save as…
geom_point()
geom_line()
geom_histogram()
geom_boxplot()
geom_bar()
и geom_col()
geom_text()
и geom_label()
geom_histogram()
🏠x
- количественный признак, распределение которого изучаемfill
(или color
) можно разделить гистограмму по значениям категориальной переменной на несколько на одном графикеgeom_boxplot()
🏠x
- значения категориальной переменнойy
- количественный признак, распределение которого изучаемfill
(или color
) можно “разбить” ящики с усами по значениям второй категориальной переменнойfactor()
🏠Преобразовать какой-то вектор в вектор с факторами:
[1] Gentoo Adelie Gentoo Chinstrap Adelie Chinstrap Gentoo
[8] Gentoo Chinstrap Gentoo
Levels: Adelie Chinstrap Gentoo
Обычно оптимальнее заранее создать столбец с факторами или преобразовать столбец с категориями в факторы:
penguins_fct <- penguins %>%
mutate(
species = factor(species, levels = c("Chinstrap", "Adelie", "Gentoo")))
penguins_fct
# A tibble: 344 × 8
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
<fct> <chr> <dbl> <dbl> <dbl> <dbl>
1 Adelie Torgersen 39.1 18.7 181 3750
2 Adelie Torgersen 39.5 17.4 186 3800
3 Adelie Torgersen 40.3 18 195 3250
4 Adelie Torgersen NA NA NA NA
5 Adelie Torgersen 36.7 19.3 193 3450
6 Adelie Torgersen 39.3 20.6 190 3650
7 Adelie Torgersen 38.9 17.8 181 3625
8 Adelie Torgersen 39.2 19.6 195 4675
9 Adelie Torgersen 34.1 18.1 193 3475
10 Adelie Torgersen 42 20.2 190 4250
# ℹ 334 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
[1] Gentoo Adelie Gentoo Chinstrap Adelie Chinstrap Gentoo
[8] Gentoo Chinstrap Gentoo
Levels: Adelie Chinstrap Gentoo
[1] "Gentoo" "Chinstrap" "Adelie"
[1] "Gentoo" "Chinstrap" "Adelie"
[1] "Chinstrap" "Adelie" "Gentoo"
as.factor()
сортирует уровни фактора по алфавиту [1] Gentoo Adelie Gentoo Chinstrap Adelie Chinstrap Gentoo
[8] Gentoo Chinstrap Gentoo
Levels: Adelie Chinstrap Gentoo
forcats::as_factor()
сортирует уровни фактора по порядку их встречи[1] "character"
[1] "character"
[1] NA NA NA NA NA NA NA NA NA NA
[1] "Adelie" "Adelie" "Chinstrap" "Chinstrap" "Chinstrap" "Gentoo"
[7] "Gentoo" "Gentoo" "Gentoo" "Gentoo"
[1] "integer"
[1] "factor"
[1] 1 2 1 3 2 3 1 1 3 1
[1] Gentoo Gentoo Gentoo Gentoo Gentoo Adelie Adelie
[8] Chinstrap Chinstrap Chinstrap
Levels: Gentoo Adelie Chinstrap
some_penguins <- c(ten_penguins$species, "Adelii")
penguin_species_list <- c("Chinstrap", "Adelie", "Gentoo", "Emperor")
some_penguins <- factor(some_penguins, levels = penguin_species_list)
some_penguins
[1] Gentoo Adelie Gentoo Chinstrap Adelie Chinstrap Gentoo
[8] Gentoo Chinstrap Gentoo <NA>
Levels: Chinstrap Adelie Gentoo Emperor
fct_drop()
Удалить неиспользуемые уровни фактора: Emperor.
[1] Gentoo Adelie Gentoo Chinstrap Adelie Chinstrap Gentoo
[8] Gentoo Chinstrap Gentoo <NA>
Levels: Chinstrap Adelie Gentoo
fct_na_value_to_level()
Приписать отсутствующим уровням (NA
) явное название.
fct_inorder()
- упорядочить уровни фактора в порядке встречаемости в вектореfct_infreq()
- упорядочить уровни фактора по частоте встречаемости.fct_rev()
- изменить порядок уровней на обратный.fct_shuffle()
- перемешать уровниfct_reorder()
и fct_reorder2()
Хотим изобразить распределения длин крыла и расположить ящики по убыванию медианы.
fct_reorder()
🏠fct_lump()
:
fct_lump_n()
- оставляет n самых многочисленных уровней, остальные объединяетfct_lump_min()
- оставляет уровни, встречающиеся не реже указанного числа разfct_lump_prop()
- оставляет уровни, встречающиеся не чаще указанной частотыfct_lump_lowfreq()
- максимально наполняет группу Other так, чтобы она все равно оставалась самой малопредставленнойСписок всех функций пакета forcats: help(package = "forcats")