Точкова диаграма в R с помощта на ggplot2 с пример
⚡ Умно обобщение
Точкова диаграма в R, използваща ggplot2, съпоставя две непрекъснати променливи с осите x и y с geom_point(). Това ръководство обхваща групатаping по цвят, логаритмични трансформации, напаснати регресионни линии, етикети, фасетиране, корекции на наслагване, мащаби, теми и запазване.

Защо графиките са важни при анализа на данни
Графиките са третата част от процеса на анализ на данни. Първата част е за данни extracАЦИ, втората част се занимава с почистване и манипулиране на данните. Най-сетне специалистът по данни може да се наложи съобщава резултатите си графично.
Работният процес на специалист по данни е обобщен на снимката по-долу.
- Първата задача на специалиста по данни е да дефинира изследователски въпрос. Този изследователски въпрос зависи от целите и задачите на проекта.
- След това една от най-важните задачи е инженерингът на характеристиките. Специалистът по данни трябва да събира, манипулира и почиства данните
- Когато тази стъпка приключи, той може да започне да изследва набора от данни. Понякога е необходимо да се прецизира и промени първоначалната хипотеза поради ново откритие.
- Когато обяснителен анализът е постигнат, специалистът по данни трябва да вземе предвид капацитета на читателя да разбират основните концепции и модели.
- Неговите резултати трябва да бъдат представени във формат, разбираем за всички заинтересовани страни. Един от най-добрите методи за общуват резултатите са чрез a крива.
- Графиките са невероятен инструмент за опростяване на сложен анализ.
Останалата част от този урок изгражда тези графики с пакета ggplot2.
Пакетът ggplot2
Този урок се фокусира върху изграждането на диаграми в R с ggplot2.
В този урок ще използвате пакета ggplot2. Пакетът имплементира Граматиката на графиките, описана от Лиланд Уилкинсън през 2005 г. ggplot2 е гъвкав, предлага се с много теми и ви позволява да зададете графика на високо ниво на абстрактен вид.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 променливата трябва да е фактор, така че gear е обвит във 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
И трите изобразяват две непрекъснати променливи една спрямо друга, така че изборът се свежда до това какво трябва да извлече читателят.
| Критерии | Точкова диаграма | Line Chart | 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 = „Drat definition“: Променете името на оста 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() контролира абсциса.
- Параметърът 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()
Три аргумента вършат по-голямата част от работата.
- ncol or nrow: принудително подреждане на панелите в дадено оформление, например 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")
|












