Данный документ представляет собой конспект главы “Base Plotting System” книги Роджера Пенга “Exploring Data With R”.
Работаем с таблицей airquality пакета datasets для R.
library(datasets)
Функция hist().
hist(airquality$Ozone)
Можно сделать покрасивее и с подложкой, показывающей распределение точек.
hist(airquality$Ozone, col = "green", breaks = 50)
rug(airquality$Ozone)
“Ящики с усами” рисует функция boxplot(). В качестве аргумента — формула y-axis ~ x-axis. Переменная x должна быть дискретной, на каждое значение рисуется свой ящик. Если вместо формулы передается один вектор данных, рисуется один ящик.
Нарисуем ящики для уровня озона по месяцам.
pal <- colorRampPalette(c("yellow", "red"))
boxplot(Ozone ~ Month, data = airquality, col = pal(5))
Видно, что в июле и августе медианы выше, чем в остальные месяцы. Дисперсии в эти месяцы тоже выше. Такая ситуация (корреляция среднего и дисперсии) в целом характерна для данных об окружающей среде.
Диаграмма рассеяния (скаттерплот) рисуется с помощью функции plot().
with(airquality, plot(Wind, Ozone))
Базовый график рисуется с помощью функции plot(), к которой можно добавлять дополнительные объекты (подписи к осям, линии, точки и т.п.) с помощью последующих команд-аннотаций.
#Первоначальный график
with(airquality, plot(Wind, Ozone), type = "n")
#Добавим подпись к графику
title(main = "Ozone and Wind in New York City")
#Отметим синим точки, относящиеся к маю
with(subset(airquality, Month == 5), points(Wind, Ozone, col = "blue"))
#Остальные точки покрасим красным
with(subset(airquality, Month != 5), points(Wind, Ozone, col = "red"))
#добавим легенду
legend("topright", pch = 1, col = c("blue", "red"), legend = c("May", "Other Months"))
Часто бывает полезно сразу рисовать поверх скаттерплота линию линейной регрессии. Это делается с помощью функции abline()
with(airquality, plot(Wind, Ozone, pch = 20))
lm.fit <- lm(Ozone ~ Wind, data = airquality)
abline(lm.fit, lwd = 2, col = "green")
Для того, чтобы нарисовать несколько графиков одновременно, используются параметры mfrow и mfcol. Оба задают количество рядов и количество графиков в каждом ряду. Если задан mfrow графики выводятся построчно, если mfcol — по столбцам.
par(mfrow = c(1, 2))
with(airquality, {
plot(Wind, Ozone, main = "Ozone and Wind")
plot(Solar.R, Ozone, main = "Ozone and Solar Radiation")
})
С помощью параметров mar и oma можно поиграться с полями между графиками и вокруг них.
#Три графика в один ряд, поля
par(mfrow = c(1,3), mar = c(4,4,2,1), oma = c(0,0,2,0))
with(airquality, {
plot(Wind, Ozone, main = "Ozone and Wind")
plot(Solar.R, Ozone, main = "Ozone and Solar Radiation")
plot(Temp, Ozone, main = "Ozone and Temperature")
#общая подпись для всех трех графиков
mtext("Ozone and Weather in New York City", outer = TRUE)
})
Посмотрим на все палитры пакета:
par(mfrow=c(1,1))
library(RColorBrewer)
display.brewer.all()
Изобразим какие-нибудь данные:
cols<- brewer.pal(3, "RdPu")
pal <- colorRampPalette(cols)
image(volcano, col = pal(20))
Возьмем данные по ветру и озону из таблицы airquality, разобьем их на четыре кластера и красиво покрасим.
cols<-brewer.pal(4,"Set1")
kmeansObj <- kmeans(data.frame(airquality$Wind, airquality$Temp), 4)
with(airquality, plot(Wind, Temp, main = "Temperature and Wind", col = cols[kmeansObj$cluster], pch = 20))