Точкова диаграма в R с помощта на ggplot2 (с пример)

Графиките са третата част от процеса на анализ на данни. Първата част е за извличане на данни, втората част се занимава с почистване и манипулиране на данните. Най-сетне специалистът по данни може да се наложи съобщава резултатите си графично.

Работата на специалиста по данни може да бъде прегледана на следната снимка

  • Първата задача на специалиста по данни е да дефинира изследователски въпрос. Този изследователски въпрос зависи от целите и задачите на проекта.
  • След това една от най-важните задачи е инженерингът на характеристиките. Специалистът по данни трябва да събира, манипулира и почиства данните
  • Когато тази стъпка приключи, той може да започне да изследва набора от данни. Понякога е необходимо да се прецизира и промени първоначалната хипотеза поради ново откритие.

Точкова диаграма в R

  • Когато обяснителен анализът е постигнат, специалистът по данни трябва да вземе предвид капацитета на читателя да разбират основните концепции и модели.
  • Неговите резултати трябва да бъдат представени във формат, разбираем за всички заинтересовани страни. Един от най-добрите методи за общуват резултатите са чрез a крива.
  • Графиките са невероятен инструмент за опростяване на сложен анализ.

пакет ggplot2

Тази част от урока се фокусира върху това как да правите графики/диаграми с R.

В този урок ще използвате пакета ggplot2. Този пакет е изграден върху последователната основа на книгата Grammar of graphics, написана от Wilkinson, 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

Обяснение на кода

  • графика: Вие съхранявате графиката си в графиката на променливата. Полезно е за по-нататъшна употреба или за избягване на твърде сложни редове от кодове
  • Аргументът stat_smooth() контролира метода на изглаждане
  • method = “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"

Можете да добавите динамично име към нашата графика, а именно средната стойност на 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 = „Drat definition“: Променете името на оста x
    • y = „миля в час“: Променете името на оста y

Изход:

Преименувайте x-Axis и y-Axis

Контролирайте везните

Можете да контролирате мащаба на оста.

Функцията 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() контролира абсциса.
  • Параметърът 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('ИМЕ НА ФАЙЛА) веднага след като начертаете графиката и тя ще бъде съхранена на твърдия диск.

Графиката се записва в работната директория. За да проверите работната директория, можете да стартирате този код:

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)

Oбобщение

Можете да обобщите аргументите за създаване на точкова диаграма в таблицата по-долу:

Цел код
Основна точкова диаграма
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")