Точкова діаграма в R за допомогою ggplot2 (з прикладом)

Графіки є третьою частиною процесу аналізу даних. Перша частина про вилучення даних, друга частина стосується очищення та маніпулювання даними. Нарешті, спеціалісту з даних може знадобитися повідомте свої результати графічно.

Роботу спеціаліста з даних можна переглянути на наступному малюнку

  • Перше завдання науковця з даних — визначити дослідницьке питання. Це питання дослідження залежить від завдань і цілей проекту.
  • Після цього одним із найвидатніших завдань є розробка функцій. Спеціаліст з даних повинен збирати, обробляти та очищати дані
  • Коли цей крок завершено, він може почати досліджувати набір даних. Іноді виникає необхідність уточнення та зміни вихідної гіпотези через нове відкриття.

Діаграма розсіювання в R

  • Коли пояснювальний аналізу досягнуто, дослідник даних повинен враховувати здатність читача до розуміти базові концепції та моделі.
  • Його результати мають бути представлені у форматі, зрозумілому всім зацікавленим сторонам. Один з найкращих методів спілкуватися результати через a графік.
  • Графіки є неймовірним інструментом для спрощення складного аналізу.

пакет ggplot2

Ця частина підручника присвячена тому, як створювати графіки/діаграми за допомогою R.

У цьому посібнику ви збираєтеся використовувати пакет ggplot2. Цей пакунок побудований на послідовній основі книги Граматика графіки, написаної Вілкінсоном у 2005 році. ggplot2 є дуже гнучким, містить багато тем і специфікацію сюжету на високому рівні абстракції. За допомогою ggplot2 ви не можете будувати тривимірну графіку та створювати інтерактивну графіку.

У ggplot2 графік складається з таких аргументів:

  • дані
  • естетичне мапування
  • геометричний об'єкт
  • статистичні перетворення
  • ваги
  • система координат
  • коригування положення
  • огранювання

Ви дізнаєтеся, як керувати цими аргументами в підручнику.

Основний синтаксис 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()`

Діаграма розкиду

Давайте подивимося, як ggplot працює з набором даних mtcars. Ви починаєте з побудови діаграми розсіювання змінної mpg та змінної drat.

Основна діаграма розсіювання

library(ggplot2)
ggplot(mtcars, aes(x = drat, y = mpg)) +
    geom_point()

Пояснення коду

  • Спочатку ви передаєте набір даних mtcars до ggplot.
  • Всередині аргументу aes() ви додаєте вісь x і вісь y.
  • Знак + означає, що ви хочете, щоб R продовжував читати код. Це робить код більш читабельним, розбиваючи його.
  • Використовуйте geom_point() для геометричного об’єкта.

вихід:

Основна діаграма розсіювання

Точкова діаграма з групами

Іноді може бути цікаво розрізнити значення за групою даних (тобто дані рівня факторів).

ggplot(mtcars, aes(x = mpg, y = drat)) +
    geom_point(aes(color = factor(gear)))

Пояснення коду

  • Функція aes() всередині geom_point() керує кольором групи. Група має бути факторною змінною. Таким чином, ви перетворюєте змінну передачу в коефіцієнт.
  • Загалом у вас є код aes(color = factor(gear)), який змінює колір точок.

вихід:

Точкова діаграма з групами

Змінити вісь

Перемасштабування даних є великою частиною роботи спеціаліста з даних. У рідкісних випадках дані мають приємну дзвонову форму. Одним із рішень, щоб зробити ваші дані менш чутливими до викидів, є їх масштабування.

ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
    geom_point(aes(color = factor(gear)))

Пояснення коду

  • Ви перетворюєте змінні x і y в log() безпосередньо всередині відображення aes().

Зауважте, що можна застосувати будь-яке інше перетворення, наприклад стандартизацію чи нормалізацію.

вихід:

Змінити вісь

Діаграма розсіювання з підігнаними значеннями

Ви можете додати інший рівень інформації до графіка. Ви можете побудувати графік підігнаного значення лінійної регресії.

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

Пояснення коду

  • graph: Ви зберігаєте свій графік у змінному graph. Це корисно для подальшого використання або уникнення надто складних рядків кодів
  • Аргумент stat_smooth() керує методом згладжування
  • method = “lm”: лінійна регресія
  • col = “#C42126”: код для червоного кольору лінії
  • se = FALSE: не відображати стандартну помилку
  • розмір = 1: розмір рядка дорівнює 1

вихід:

Точкова діаграма з підігнаними значеннями

Зауважте, що доступні інші методи згладжування

  • glm
  • гам
  • loess: значення за замовчуванням
  • обід

Додайте інформацію до графіка

Поки що ми не додавали інформацію до графіків. Графіки повинні бути інформативними. Читач повинен побачити історію аналізу даних, просто подивившись на графік без посилання на додаткову документацію. Отже, для графіків потрібні хороші мітки. Ви можете додавати мітки за допомогою функції labs().

Основний синтаксис для lab() такий:

lab(title = "Hello Guru99")
argument:
- title: Control the title. It is possible to change or add title with:			
- subtitle: Add subtitle below title			
- caption: Add caption below the graph			
- x: rename x-axis			
- y: rename y-axis			
Example:lab(title = "Hello Guru99", subtitle = "My first plot")	

Додайте назву

Однією з обов’язкових відомостей, яку потрібно додати, є назва.

my_graph +
    labs(
        title = "Plot Mile per hours and drat, in log"
         )

Пояснення коду

  • my_graph: ви використовуєте графік, який ви зберегли. Це дозволяє уникнути переписування всіх кодів кожного разу, коли ви додаєте нову інформацію на графік.
  • Ви загортаєте заголовок у lab().
  • Код для червоного кольору лінії
  • se = FALSE: не відображати стандартну помилку
  • розмір = 1: розмір рядка дорівнює 1

вихід:

Додайте заголовок

Додайте назву з динамічною назвою

Динамічний заголовок корисний для додавання більш точної інформації в заголовок.

Ви можете використовувати функцію 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)
)

Пояснення коду

  • Ви створюєте середнє значення 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"
    )

Пояснення коду

  • Всередині lab() ви додали:
    • 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"
    )

Пояснення коду

  • Всередині lab() ви додали:
    • x = «Визначення креслення»: змініть назву осі x
    • y = «Миля на годину»: змініть назву осі y

вихід:

Перейменуйте вісь x і вісь 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 з кроком 3, у вас буде чотири числа, 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"
    )

Пояснення коду

  • Функція scale_y_continuous() керує осі
  • Функція scale_x_continuous() керує вісь x.
  • Параметр breaks керує розділенням осі. Ви можете вручну додати послідовність чисел або скористатися функцією seq():
    • seq(1, 3.6, by = 0.2): створити шість чисел від 2.4 до 3.4 з кроком 3
    • seq(1, 1.6, by = 0.1): створити сім чисел від 1 до 1.6 з кроком 1

вихід:

Керуйте вагами

тема

Нарешті, R дозволяє нам налаштувати наш сюжет за допомогою різних тем. Бібліотека ggplot2 включає вісім тем:

  • theme_bw()
  • theme_light()
  • theme_classis()
  • 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) відразу після побудови графіка, і він буде збережений на жорсткому диску.

Графік зберігається в робочому каталозі. Щоб перевірити робочий каталог, ви можете запустити цей код:

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)

Підсумки

Ви можете узагальнити аргументи для створення діаграми розсіювання в таблиці нижче:

Мета код
Основна діаграма розсіювання
ggplot(df, aes(x = x1, y = y)) + geom_point()
Точкова діаграма з групою кольорів
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Додайте відповідні значення
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
Додайте заголовок
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()
Зберегти
ggsave("my_fantastic_plot.png")