Диаграмма рассеяния в R с использованием ggplot2 (с примером)

Графики — это третья часть процесса анализа данных. Первая часть посвящена извлечение данных, вторая часть посвящена очистка и манипулирование данными. Наконец, специалисту по данным, возможно, придется представить свои результаты графически.

Работу специалиста по анализу данных можно увидеть на следующем рисунке.

  • Первая задача специалиста по данным — определить вопрос исследования. Данный исследовательский вопрос зависит от целей и задач проекта.
  • После этого одной из наиболее важных задач является разработка функций. Специалисту по данным необходимо собирать, манипулировать и очищать данные.
  • Когда этот шаг будет завершен, он сможет приступить к исследованию набора данных. Иногда необходимо уточнить и изменить исходную гипотезу в связи с новым открытием.

Диаграмма рассеяния в R

  • Когда пояснительная анализ достигнут, специалист по данным должен учитывать способность читателя понять основные концепции и модели.
  • Его результаты должны быть представлены в формате, понятном всем заинтересованным сторонам. Один из лучших способов общаться результаты через график.
  • Графики — невероятный инструмент для упрощения сложного анализа.

пакет 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() управляет методом сглаживания.
  • метод = «lm»: линейная регрессия
  • col = «#C42126»: код красного цвета линии.
  • se = FALSE: не отображать стандартную ошибку.
  • размер = 1: размер строки равен 1

Вывод:

Диаграмма рассеяния с подобранными значениями

Обратите внимание, что доступны и другие методы сглаживания.

  • GLM
  • гам
  • лесс: значение по умолчанию
  • обод

Добавьте информацию в график

Пока мы не добавили информацию в графики. Графики должны быть информативными. Читатель должен увидеть историю анализа данных, просто взглянув на график, не обращаясь к дополнительной документации. Следовательно, графикам нужны хорошие метки. Вы можете добавлять метки с помощью функции 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"

Вы можете добавить к нашему графику динамическое имя, а именно: среднее значение расхода миль на галлон.

mean_mpg <- mean(mtcars$mpg)
my_graph + labs(
    title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg)
)

Код Пояснение

  • Вы создаете среднее значение миль на галлон, используя среднее значение (mtcars$mpg), хранящееся в переменнойmean_mpg.
  • Вы используете метод Paste() с помощью функции «Mean_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_continious() управляет оси
  • Функция Scale_x_continious() управляет Ось х.
  • Параметр 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)

Резюме

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

Цель Code
Базовый график рассеяния
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"))
Переименовать х
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")