Точкова діаграма в R з використанням ggplot2 на прикладі
⚡ Розумний підсумок
Точкова діаграма в R з використанням ggplot2 відображає дві неперервні змінні на осі x та y за допомогою geom_point(). Цей посібник охоплює групиping за кольором, логарифмічними перетвореннями, підібраними лініями регресії, мітками, фасетуванням, виправленнями накладання графіків, масштабами, темами та збереженням.

Чому графіки важливі в аналізі даних
Графіки є третьою частиною процесу аналізу даних. Перша частина про дані extracції, друга частина стосується очищення та маніпулювання даними. Нарешті, спеціалісту з даних може знадобитися повідомте свої результати графічно.
Робочий процес спеціаліста з обробки даних коротко зображено на зображенні нижче.
- Перше завдання науковця з даних — визначити дослідницьке питання. Це питання дослідження залежить від завдань і цілей проекту.
- Після цього одним із найвидатніших завдань є розробка функцій. Спеціаліст з даних повинен збирати, обробляти та очищати дані
- Коли цей крок завершено, він може почати досліджувати набір даних. Іноді виникає необхідність уточнення та зміни вихідної гіпотези через нове відкриття.
- Коли пояснювальний аналізу досягнуто, дослідник даних повинен враховувати здатність читача до розуміти базові концепції та моделі.
- Його результати мають бути представлені у форматі, зрозумілому всім зацікавленим сторонам. Один з найкращих методів спілкуватися результати через a графік.
- Графіки є неймовірним інструментом для спрощення складного аналізу.
У решті цього посібника ці графіки будуються за допомогою пакета ggplot2.
Пакет ggplot2
Цей посібник зосереджений на побудові діаграм в R за допомогою ggplot2.
У цьому посібнику ви будете використовувати пакет ggplot2. Пакет реалізує граматику графіки, описану Леландом Вілкінсоном у 2005 році. ggplot2 є гнучким, постачається з багатьма темами та дозволяє вказати графік на високому рівні ABS.tracція. Зверніть увагу, що він не створює тривимірну або інтерактивну графіку; для них потрібні такі пакети, як plotly або rgl.
У ggplot2 графік складається з таких аргументів:
- дані
- естетична картаping
- геометричний об'єкт
- статистичні перетворення
- ваги
- система координат
- коригування положення
- огранювання
Ви дізнаєтеся, як керувати цими аргументами в підручнику.
Основний синтаксис ggplot2:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Як створити діаграму розсіювання в R
Давайте подивимося, як ggplot працює з набором даних mtcars. Ви починаєте з побудови діаграми розсіювання змінної mpg та змінної drat.
Основна діаграма розсіювання
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Code Пояснення
- Спочатку ви передаєте набір даних mtcars до ggplot.
- Всередині аргументу aes() ви додаєте вісь x і вісь y.
- Знак + означає, що ви хочете, щоб R продовжував читати код. Це робить код більш читабельним, розбиваючи його.
- Використовуйте geom_point() для геометричного об’єкта.
вихід:
Точкова діаграма з групами
Іноді може бути цікаво розрізнити значення за групою даних (тобто дані рівня факторів).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Code Пояснення
- aes() всередині geom_point() контролює колір кожної групи. Групаping Змінна має бути фактором, тому шестерня обгортається у factor().
- Загалом у вас є код aes(color = factor(gear)), який змінює колір точок.
вихід:
Зміна масштабу осей за допомогою логарифмічного перетворення
Перемасштабування даних є значною частиною роботи аналітика, оскільки необроблені змінні рідко надходять у чіткій формі дзвона. Логарифмування – це один із способів стиснути екстремальні значення та зробити графік менш чутливим до викидів.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Code Пояснення
- Ви трансформуєте змінні x та y у log() безпосередньо всередині карти aes().ping.
Зауважте, що можна застосувати будь-яке інше перетворення, наприклад стандартизацію чи нормалізацію.
вихід:
Діаграма розсіювання з підігнаними значеннями
Ви можете додати до графіка ще один рівень інформації. Ви можете накласти підібрані значення лінійна регресія.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Code Пояснення
- my_graph: графік зберігається в об'єкті my_graph, тому на наступних кроках можна додавати шари без повторення всього виклику
- Аргумент stat_smooth() керує методом згладжування
- method = “lm”: лінійна регресія
- стовпець = “#C42126”: Code для червоного кольору лінії
- se = FALSE: не відображати стандартну помилку
- size = 1: товщина лінії. У ggplot2 3.4.0 та пізніших версіях цей аргумент було перейменовано на linewidth для геометрій ліній.
вихід:
Зауважте, що доступні інші методи згладжування
- glm
- гам
- лес: за замовчуванням менше ніж 1,000 спостережень
- rlm: робустна лінійна модель з пакету MASS
Перш ніж стилізувати діаграму, варто знати, коли взагалі доцільно використовувати точкову діаграму.
Точкова діаграма проти лінійної діаграми Bubble Діаграма в R
Усі три порівнюють дві неперервні змінні одна з одною, тому вибір зводиться до того, що читач має зрозуміти.
| Критерії | Діаграма розкиду | Графік лінія | Bubble Діаграма |
|---|---|---|---|
| Шоу | Кореляція між двома змінними | Зміна однієї змінної вздовж упорядкованої осі | Кореляція плюс третя величина |
| Вісь X | Будь-яка неперервна змінна | Зазвичай час або інша впорядкована шкала | Будь-яка неперервна змінна |
| Порядок очок | Нерелевантні | Критичні точки з'єднані | Нерелевантні |
| Третя змінна | Через колір або форму | Через окремі лінії | Розмір наскрізної точки |
| виклик ggplot2 | geom_point() | geom_line() | geom_point(aes(розмір = z)) |
З'єднання точок розсіювання лінією, коли вісь x не має природного порядку, є поширеною помилкою: це означає послідовність, якої не існує. Зарезервуйте geom_line() для впорядкованих осей, таких як дати. Для розподілів однієї змінної використовуйте коробкова діаграма замість цього.
Додайте інформацію до графіка
Поки що графіки не містять пояснювального тексту. Читач повинен мати змогу зрозуміти суть лише з даних діаграми, без звернення до додаткової документації, а це означає, що діаграма потребує гарних підписів. Ви можете додати підписи за допомогою функції labs().
Основний синтаксис для labs() такий:
labs(title = "Hello Guru99") arguments: - title: Main title displayed above the plot - subtitle: Secondary line below the title - caption: Note below the plot, usually the data source - x: Rename the x-axis - y: Rename the y-axis - color / fill: Rename the legend Example: labs(title = "Hello Guru99", subtitle = "My first plot")
Додайте назву
Однією з обов’язкових відомостей, яку потрібно додати, є назва.
my_graph +
labs(
title = "Plot Mile per hours and drat, in log"
)
Code Пояснення
- my_graph: ви використовуєте графік, який ви зберегли. Це дозволяє уникнути переписування всіх кодів кожного разу, коли ви додаєте нову інформацію на графік.
- Ви поміщаєте заголовок всередину labs().
вихід:
Додайте назву з динамічною назвою
Динамічний заголовок корисний для додавання більш точної інформації в заголовок.
Ви можете використовувати функцію paste() для друку статичного та динамічного тексту. Основний синтаксис paste() такий:
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
приклад:
A <- 2010
paste("The first year is", A)
вихід:
## [1] "The first year is 2010"
B <- 2018
paste("The first year is", A, "and the last year is", B)
вихід:
## [1] "The first year is 2010 and the last year is 2018"
Ви можете додати динамічну назву до нашого графіка, а саме середнє значення mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Code Пояснення
- Ви створюєте середнє значення mpg за допомогою mean(mtcars$mpg), що зберігається у змінній mean_mpg
- Ви використовуєте paste() із mean_mpg, щоб створити динамічний заголовок, який повертає середнє значення mpg
вихід:
Додайте субтитри
Дві додаткові деталі роблять графік більш чітким. Йдеться про підзаголовок і підпис. Підзаголовок розміщується одразу під заголовком. Підпис може інформувати про те, хто виконав обчислення та джерело даних.
my_graph +
labs(
title =
"Relation between Mile per hours and drat",
subtitle =
"Relationship break down by gear class",
caption = "Authors own computation"
)
Code Пояснення
- Усередині labs() ви додали:
- title = «Співвідношення між милями на годину та дратами»: Додайте назву
- subtitle = «Розбивка зв’язків за класом спорядження»: додайте підзаголовок
- caption = “Власні розрахунки авторів: Додайте підпис
- Ви відокремлюєте кожну нову інформацію комою, ,
- Зауважте, що ви порушуєте рядки коду. Це не є обов’язковим і лише допомагає легше читати код
вихід:
Перейменуйте вісь x і вісь y
Назви стовпців рідко бувають зручними для презентації. Вони часто скорочуються або використовують підкреслення між словами, як у GDP_CAP. Перейменуйте їх на графіку та додайте одиниці вимірювання там, де вони важливі.
my_graph +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Пояснення
- Усередині labs() ви додали:
- x = «Визначення креслення»: змініть назву осі x
- y = «Миля на годину»: змініть назву осі y
вихід:
Керуйте вагами
Ви можете керувати масштабом осі.
Функція seq() зручна, коли потрібно створити послідовність чисел. Основний синтаксис:
seq(begin, last, by = x)
arguments:
- begin: First number of the sequence
- last: Last number of the sequence
- by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Наприклад, діапазон від 0 до 12 з кроком 4 повертає чотири числа: 0, 4, 8 та 12.
seq(0, 12,4)
вихід:
## [1] 0 4 8 12
Ви можете керувати масштабом осей X і Y, як показано нижче
my_graph +
scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Пояснення
- Функція scale_y_continuous() керує осі
- Функція scale_x_continuous() керує вісь x.
- Параметр breaks керує розділенням осі. Ви можете вручну додати послідовність чисел або скористатися функцією seq():
- seq(1, 3.6, by = 0.2): Створити послідовність від 1 до 3.6 з кроком 0.2, тобто 14 точок зупинки
- seq(1, 1.6, by = 0.1): Створити сім чисел від 1 до 1.6 з кроком 0.1
вихід:
тема
Зрештою, ggplot2 дозволяє змінювати стиль усього сюжету за допомогою однієї функції теми. У пакеті постачається вісім повних тем:
- theme_bw()
- theme_light()
- класична_тема()
- theme_linedraw()
- theme_dark()
- theme_minimal()
- theme_gray()
- theme_void()
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
вихід:
Зберегти ділянки
Після всіх цих кроків настав час зберегти та поділитися вашим графіком. Викличте функцію ggsave(“name_of_the_file.png”) одразу після побудови графіка, і зображення буде записано на диск.
Графік зберігається в робочому каталозі. Щоб перевірити робочий каталог, ви можете запустити цей код:
directory <- getwd() directory
Побудуйте готовий графік, збережіть його та перевірте, де він зупинився:
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
вихід:
ggsave("my_fantastic_plot.png")
вихід:
## Saving 5 x 4 in image
Примітка:: Лише з педагогічною метою ми створили функцію під назвою open_folder(), щоб відкрити для вас папку каталогу. Вам просто потрібно запустити наведений нижче код і побачити, де зберігається зображення. Ви повинні побачити імена файлів my_fantastic_plot.png.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Як створити фасетовані діаграми розсіювання в R за допомогою facet_wrap()
Фасетування – один із восьми компонентів ggplot2, перелічених раніше, і це найчистіша відповідь на переповнену діаграму. Замість того, щоб втискати кожну групу в одну панель, ggplot2 малює невеликий кратний для кожного рівня змінної, всі в однакових масштабах, щоб панелі залишалися порівнянними.
# One panel per gear count ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() + facet_wrap(~ gear) + theme_classic()
Три аргументи виконують більшу частину роботи.
- кол or нурувати: примусово розмістити панелі у заданому макеті, наприклад facet_wrap(~ gear, ncol = 2).
- ваги: за замовчуванням «фіксовано», тому кожна панель має один спільний діапазон осей. Використовуйте «free_y» або «free», коли групи суттєво відрізняються за величиною, але майте на увазі, що вільні масштаби роблять візуальне порівняння між панелями оманливим.
- етикетувальний верстат: замінює рівень необробленого коефіцієнта в кожній смузі, наприклад, labeller = label_both для друку «gear: 4» замість «4».
Дві групиping змінні. Використайте facet_grid() для побудови матриці панелей, де перша змінна розподіляється по рядках, а друга – по стовпцях:
ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point(aes(color = factor(cyl))) + facet_grid(am ~ gear) + theme_classic()
Грані чи кольори? Колір добре працює приблизно для чотирьох груп на діаграмі з обмеженим перекриттям. Після цього, або коли групи сильно перекриваються, фасетування легше читати, оскільки кожна панель містить лише свої власні точки. Ви можете комбінувати обидва: фасетування за однією змінною та колір за іншою, як у прикладі facet_grid() вище.
Як обробляти перенаповнення на точкових діаграмах R
При кількох десятках спостережень видно кожну точку. При тисячах маркери накладаються один на одного, і найщільніша область просто зчитується як суцільна пляма. Тобто надмірне планування, а ggplot2 пропонує чотири стандартні засоби вирішення проблеми.
1. Зменште непрозорість. Найдешевше виправлення. Перекриттяping точки темніють природним чином, тому стає помітною щільність:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + theme_classic()
2. Дискретні значення джиттера. Коли змінна приймає лише кілька значень, точки потрапляють на однакові координати. Їх розділяє невелике випадкове зміщення:
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_jitter(width = 0.15, height = 0) + theme_classic()
Встановіть висоту = 0, щоб значення y, які несуть реальну інформацію, ніколи не змінювалися.
3. Викиньте літак. Для великих наборів даних підраховуйте спостереження для кожної комірки та позначте кількість кольором. Шестикутні контейнери уникають візуальних артефактів, які створюють квадратні контейнери:
ggplot(diamonds, aes(x = carat, y = price)) + geom_hex(bins = 40) + theme_classic()
4. Намалюйте контури щільності. Контурні лінії окреслюють області, де зосереджені спостереження, і вони акуратно нашаровуються на збляклі точки:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + geom_density_2d(color = "#C42126") + theme_classic()
Як правило, альфа обробляє кілька тисяч точок, гексагональне бінінгування — десятки тисяч, а вибірка даних за допомогою dplyr::slice_sample() є прагматичним варіантом після цього.
Точкова діаграма в R: Code Посилання
У таблиці нижче наведено виклик ggplot2 для кожного з описаних вище параметрів:
| Мета | Code |
|---|---|
| Основна діаграма розсіювання |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
| Точкова діаграма з групою кольорів |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x2))) |
| Додайте відповідні значення |
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm") |
| Додайте заголовок |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
| Додайте субтитри |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
| Перейменувати x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
| Перейменувати y |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
| Контролюйте масштаб |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1)) |
| Створення журналів |
ggplot(df, aes(x = log(x1), y = log(y))) + geom_point() |
| тема |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
| Аспект групою |
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2) |
| Обробка перекреслення |
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3) |
| Зберегти |
ggsave("my_fantastic_plot.png")
|












