Самый простой график

Давайте попробуем нарисовать наш первый график. Для этого создадим 2 массива: x и y. Используя функцию plot() и эти массивы, изобразим график.

x <- 1:7
y <- x^2
plot(x,y)

График выглядит не очень. Давайте добавим название осей.

plot(x, y, xlab = 'Номер посиделки', ylab = 'Знание R')

Графики на реальных данных

Перед вами 3 массива:

micro <- c(34,55,71,42,39,52,0,71,88,84,90,43,41,14,63,96,90,29,57,65,49,88,29,84,17,
48,41,54,50,89,84,20,79,56,32,48,83,68,59,70,93,84,53,50,53,91,62,42,31,20,29,72,87,28,73,33,31,
42,35,90,57,95,84,21,91,54,79)

ege <- c(194,261,237,229,203,211,234,266,262,259,259,248,243,181,203,279,222,203,198,268,267,257,
260,264,261,257,258,263,240,254,281,260,266,272,256,214,257,269,267,258,280,265,224,255,265,264,
231,216,262,274,220,261,253,271,263,250,257,242,258,268,258,278,255,264,279,279,275)

gender <- c('М','Ж','М','М','М','М','М','Ж','Ж','Ж','Ж','Ж','Ж','Ж','М','М','Ж','М','М','М','М',
'Ж','М','Ж','Ж','Ж','Ж','М','Ж','М','Ж','М','Ж','Ж','М','М','Ж','Ж','Ж','М','М','Ж','М','Ж','М',
'М','Ж','М','Ж','Ж','Ж','М','Ж','Ж','Ж','Ж','Ж','Ж','М','М','М','Ж','М','Ж','Ж','Ж','М')

print(length(micro))
print(length(ege))
print(length(gender))
## [1] 67
## [1] 67
## [1] 67

Давайте построим обычный график зависимости баллов по микроэкономике от баллов по ЕГЭ.

plot(ege, micro, xlab = 'Баллов по ЕГЭ', 
                 ylab = 'Баллов по микроэкономике')

Цвет можно менять с помощью параметра col.

plot(ege, micro, xlab = 'Баллов по ЕГЭ', 
                 ylab = 'Баллов по микроэкономике',
                 col = 'red')

Также можно менять значок c помощью параметра pch. Здесь можно найти список значений для этого параметра.

plot(ege, micro, col = 'red', pch = 17)

С помощью функции points можно добавить еще наблюдений. Давайте добавим меня.

plot(ege, micro, col = 'red', pch = 17)
points(235,98, col = 'blue', pch = 16)

Все таки есть какая-то закономерность(чем больше баллов по его, тем больше результат по микроэкономике). С помощью функции abline можно добавить линию, которая будет показывать эту закономерность. Данную закономерность можно найти с помощью МНК(метод наименьших квадратов). В этом вам поможет функция lm.

lm(micro~ege)
## 
## Call:
## lm(formula = micro ~ ege)
## 
## Coefficients:
## (Intercept)          ege  
##    -40.2813       0.3897
plot(ege, micro, col = 'red', pch = 17)
points(235,98, col = 'blue', pch = 16)
abline(a = -40.2, b = 0.39, lty = 2, lwd = 5, col = 'green')

Важно понимать, что points и abline накладываются на график, поэтому он должен быть предварительно нарисован.

Параметры abline:

На самом деле pch может быть не только фиксированным. Пусть он зависит от пола студента.

plot(ege, micro, col = 'red', pch = gender)

С помощью abline можно делать вертикальные или горизонтальные линии.

plot(ege, micro, col = 'red', pch = 17)
abline(h = mean(micro), col = 'blue')
abline(v = mean(ege), col = 'green')

Создание нескольких графиков вместе

Иногда нужно нарисовать несколько графиков вместе. Для этого перед построением графиков можно разметить сетку: par(mfrow = c(nrow, ncol)), где nrow – количество строк, а ncol – количество столбцов. Для добавления названия графика нужно использовать функцию title. Если заголовок большой, то можно использовать перенос строки с помощью \n.

par(mfrow = c(2, 2))

plot(ege, micro, col = 'red', pch = 17)
title('Резы по микро vs баллы ЕГЭ')

plot(ege, micro, col = 'blue', pch = 15, log = 'x')
title('Резы по микро vs логарифм баллов ЕГЭ')

plot(ege, micro, col = 'green', pch = 14, log = 'y')
title('Логарифм рез по микро vs баллы ЕГЭ')

plot(ege, micro, col = 'black', pch = 18, log = 'xy')
title('Логарифм рез по микро \nvs логарифм баллов ЕГЭ')

Опции plot

С помощью параметра type можно по-разному отображать наши данные.

x <- -5:5
y <- x^2
par(mfrow = c(2, 2))
plot(x,y, type = 'p', col = 'red')
title("Точки")

plot(x,y, type = 'l', col = 'purple')
title("Линия")

plot(x,y, type = 'o', col = 'blue')
title("Линия с точками")

plot(x,y, type = 's', col = 'orange')
title("Ступеньки")

С помощью параметров xlim и ylim можно задавать границы графика.

x <- -5:5
y <- x^2
plot(x,y, type = 'p', col = 'blue',
     xlim = c(0,5),
     ylim = c(0,20))

Добавление текста

На график иногда бывает полезно нанести текст.

plot(ege, micro, col = 'red', pch = 17)
points(235,98, col = 'blue', pch = 16)
text(232,93,adj = 1, 'Это я ->', srt = 58, font = 11, col = 'blue', cex = 1.2)

Параметры функции text:

Можно использовать так:

plot(ege, micro)
text(ege[1:10],micro[1:10], adj = 1, 'Это не я',  font = 11, col = 'red', cex = 1)

Текст может быть фиксированным, а может зависеть от переменной.

plot(ege, micro)
text(ege[1:10],micro[1:10],adj = 1, labels = gender[1:10], font = 11, col = 'red', cex = 1.2)

Легенда

С помощью функции legend можно добавить легенду для нашего графика.

plot(ege[1:20], micro[1:20], col = 'red', pch = 17)
points(ege[20:length(ege)], micro[20:length(micro)], col = 'blue', pch = 18)
legend(x = "topleft", col = c('blue', 'red'), pch = c(17,17) ,legend = c('Первые 20', 'Остальные'))

Гистограмма

Давайте попробуем нарисовать гистограмму, которая покажет нам распределение любимых предметов.

R <- rep('Инфа', 5)
Math <- rep('Матан', 6)
Mi <- rep('Микра', 7)
E <- rep('Англ', 8)
L <- rep('Линал', 9)
D <- rep('Дискретка', 15)

all <- c(R, Math, Mi, E, L, D)
plot(as.factor(all), ylab = 'Количество людей',
                     xlab = 'Название предмета')