Практика: строим графики синуса и косинуса с помощью ggplot
Нам нужно построить графики синуса и косинуса с помощью ggplot. Первое что нужно сделать это создать датасет (таблица) в котором будет переменная х отображать пределы построения графика (от -3*pi до 3*pi с шагом 0.1), а значения синуса и косинуса попадут для наглядности в вектора Sin и Cos.
# графики синуса и косинуса
library(ggplot2)
x = seq(-3*pi, 3*pi, 0.1)
Sin = sin(x)
Cos = cos(x)
df = data.frame(Sin, Cos)
head(df)
> head(df) Sin Cos 1 -3.673819e-16 -1.0000000 2 -9.983342e-02 -0.9950042 3 -1.986693e-01 -0.9800666 4 -2.955202e-01 -0.9553365 5 -3.894183e-01 -0.9210610 6 -4.794255e-01 -0.8775826 |
Собственно, теперь можно построить и сами графики. Для еще большей наглядности отобразим график синуса синим цветом (Синус – начинается на букву «С» поэтому и название цвета тоже будет на букву «С» - «синий») а график косинуса красным (Косинус – начинается на букву «К» и соответственно название цвета будет начинаться на эту же букву «К» - «красный»).
ggplot(data = df)+
geom_line(aes(x=x, y=Sin), lwd =2, col='blue') +
geom_line(aes(x=x, y=Cos), lwd =2, col='red') +
theme_linedraw()
Но все же не хватает наглядности: хорошо если бы прямо на графике отображалась подсказка, которая отображала название функции и указывала ее цвет на графике. Это возможно сделать, но придется немного изменить и сам датафрейм – теперь в нем мы укажем еще и названия функций.
df2 = rbind(data.frame(func='sin', x, data = Sin),
data.frame(func='cos', x, data = Cos))
А теперь построим снова графики и обратите внимание что изменилось по сравнению с прошлым графиком.
ggplot(df2,
aes(x = x,
y = data,
col = func)) +
geom_line(lwd=2) +
theme_linedraw()
Вот теперь все очень наглядно и понятно какой график и какой именно функции построен. Но все же есть небольшой минус: цвета графиков стали другими, а мы хотим, чтобы по-прежнему график синуса был синим, а косинуса красным. Это можно легко исправить, добавив всего одну строку: scale_color_manual(values = c("red", "blue"))
ggplot(df2, # Specify colors manually
aes(x = x,
y = data,
col = func)) +
geom_line(lwd=2) +
scale_color_manual(values = c("red", "blue")) +
theme_linedraw()
Осталось добавить только название графика и задача выполнена
ggplot(df2, # Specify colors manually
aes(x = x,
y = data,
col = func)) +
geom_line(lwd=2) +
scale_color_manual(values = c("red", "blue")) +
ggtitle("Графики функций sin cos",
subtitle = "sin cos")+
theme_linedraw()
Можно еще немного улучшить наше творчество: представлю только скрипт и то что получится в результате его выполнения (а вам задание - попробуйте разобраться в скрипте самостоятельно).
ggplot(df2, aes(x = x, y = data,col = func)) +
geom_line(lwd=2) +
scale_color_manual(values = c("red", "blue")) +
ggtitle("Графики функций sin cos",
subtitle = "sin cos") +
xlab("Ох") +
ylab("Оу") +
geom_vline(xintercept = 0,linewidth = 1.5) +
geom_hline(yintercept = 0,linewidth = 1.5) +
theme_linedraw()
А еще можно строить графики так чтобы каждый был в отдельном окне
# графики синуса и косинуса в разных окнах
library(ggplot2)
x = seq(-3*pi, 3*pi, 0.1)
Sin = sin(x)
Cos = cos(x)
df2 = rbind(data.frame(func='sin', x, data = Sin),
data.frame(func='cos', x, data = Cos))
ggplot(df2, aes(x = x, y = data,col = func)) +
geom_line(lwd=2) +
scale_color_manual(values = c("red", "blue")) +
ggtitle("Графики функций sin cos",
subtitle = "sin cos") +
xlab("Ох") +
ylab("Оу") +
geom_vline(xintercept = 0,linewidth = 1.5) +
geom_hline(yintercept = 0,linewidth = 1.5) +
facet_wrap(~func)+
theme_linedraw() +
theme(strip.background = element_rect(fill = "grey"),
strip.text = element_text(color = "black", face = "bold"))





