Регрессия в ggplot2
Сначала сформируем задачу. В нашем распоряжении имеются данные зависимости y(x) выраженное квадратичной функцией. Но мы "добавим" в модель небольшую погрешность как в аргумент, так и в результат. А потом попытаемся методом регрессионного анализа найти подходящую функцию, которая описывает нашу модель. И наконец мы визуализируем данные построив график на котором отобразим стандартные линии ошибок. Первую часть задачи выполнит скрипт:
library(ggplot2)
library(ggthemes)
x = c()
set.seed(545)
xx = seq(-3, 4, 0.1)
x = xx + rnorm(length(xx),mean = 0, sd = 1.5)
y = (2*x^2 - 3*x - 5)*rnorm(length(xx),mean = 1, sd = 0.25)
df = data.frame(x, y)
md = lm(y ~ poly(x, degree = 2, raw = TRUE))
summary(md)
> summary(md) Call: lm(formula = y ~ poly(x, degree = 2, raw = TRUE)) Residuals: Min 1Q Median 3Q Max -12.9160 -1.0406 -0.1292 1.2918 18.2630 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -4.45117 0.62455 -7.127 8.37e-10 *** poly(x, degree = 2, raw = TRUE)1 -3.61623 0.20387 -17.738 < 2e-16 *** poly(x, degree = 2, raw = TRUE)2 1.96512 0.06397 30.721 < 2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 4.132 on 68 degrees of freedom Multiple R-squared: 0.9414, Adjusted R-squared: 0.9396 F-statistic: 545.9 on 2 and 68 DF, p-value: < 2.2e-16 |
Как видим результат относительно неплохой, несмотря на то что мы добавили ошибку в данные. Переходим к увлекательному процессу визуализации.
ggplot(df, aes(x = x, y = y)) +
geom_point() +
labs(x="данные по Х", y = "данные по Y",title=' Regression Plot ') +
geom_smooth(method = lm, formula = y ~ splines::ns(x, 2),
color='red', lwd =1.3)+
theme_gdocs() +
theme(
panel.background = element_rect(fill = "powderblue",
color = "powderblue",
size = 0.5, linetype = "solid"),
panel.grid.major = element_line(size = 0.75, linetype = 'solid', color = "grey30"),
panel.grid.minor = element_line(size = 0.25, linetype = 'solid', color = "grey30")
)
Как изменить внешний вид графика с помощью встроенных тем ggplot2
Для каждого из следующих примеров мы будем использовать радужную оболочку из встроенного набора данных R:
Gray_theme
Тема по умолчанию с серым фоном и белой сеткой.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_gray()
чб_тема
Черно-белая тема.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_bw()
theme_linedraw
Тема только с черными линиями разной ширины на белом фоне.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_linedraw()
theme_light
Тема, похожая на theme_linedraw , но с серыми линиями и осями, предназначенными для привлечения большего внимания к данным.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_light()
темная_тема
Тема, похожая на theme_light , но с темным фоном. Полезная тема для выделения тонких цветных линий.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_dark()
минимальная_тема
Тема без фоновых аннотаций.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_minimal()
классическая_тема
Тема без сеток.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_classic()
theme_void
Совершенно пустая тема.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_void()
Как изменить внешний вид графиков, используя предустановленные темы из библиотеки ggthemes
Помимо использования встроенных тем ggplot2, мы можем использовать предопределенные темы из библиотеки ggthemes для изменения эстетики графиков.
Сначала мы загрузим библиотеку ggthemes:
library(ggthemes)
Затем мы покажем несколько примеров использования предопределенных тем для изменения эстетики сюжетов:
theme_wsj
Тема из Wall Street Journal.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_wsj()
theme_tufte
Минималистская тема, вдохновленная работой статистика Эдварда Тафти.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_tufte()
соляризованная_тема
Тема, использующая цвета на основе Solarized Palette .
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_solarized()
Обратите внимание, что мы также можем использовать аргумент Light = FALSE , чтобы использовать темный фон на графике:
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_solarized( light = FALSE )
theme_gdocs
Тема с настройками диаграмм Google Docs по умолчанию.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_gdocs()
theme_fivethirtyeight
Тема навеяна сюжетами сайта Fivethirtyeight.com .
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_fivethirtyeight()
тема_экономист
Тема, вдохновленная The Economist.
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme_economist()
Как редактировать отдельные компоненты графиков
Мы можем использовать функции theme() и element_rect() для изменения цвета фона панели графика:
theme(panel.background = element_rect(fill, color, size))
- fill: цвет заливки прямоугольника
- цвет: цвет границы
- размер: размер границы
Мы также можем использовать функцию element_line() для изменения размера и внешнего вида сетки:
theme(panel.grid.major = element_line(color, size, linetype), panel.grid.minor = element_line(color, size, linetype))
- цвет: цвет границы
- размер: размер границы
- linetype: тип линии («пустая», «сплошная», «пунктирная», «пунктирная», «точечная штриховая», «длинная штриховая», «две черточки»)
Следующий код демонстрирует, как удалить границы и линии сетки панели графика:
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank())
Следующий код демонстрирует, как изменить фон и линии сетки панели графика:
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) + geom_point() + theme( panel.background = element_rect(fill = "powderblue", color = "powderblue", size = 0.5, linetype = "solid"), panel.grid.major = element_line(size = 0.5, linetype = 'solid', color = "white"), panel.grid.minor = element_line(size = 0.25, linetype = 'solid', color = "white") )
