Задача 1 построить график заданной функции
Итак, нам необходимо построить график заданной функции в среде программирования R. Причем нам необходимо построить не только график, но и задать определенным образом и координатную сетку. Самым лучший способ — это воспользоваться библиотекой ggplot2.
library(ggplot2)
Первый шаг – нам необходимо задать собственно функцию. Функция - одно из основных математических определений - выражает зависимость между переменными величинами, при которой каждому рассматриваемому значению одной величины Х соответствует определённое значение другой величины Y. Пусть нам нужно построить график функции f(x)=9−x2f(x)=9−x2 на интервале от минус 4 до плюс 4.В среде программирования R это можно реализовать так:
f = function(x) 9-x^2
x = seq(-4, 4, 0.1)
y = f(x)
df = data.frame(x, y)
Второй шаг - строим график функции.Теперь перейдем к ggplot2. Можно считать, что у библиотеки ggplot2 есть своя философия, поняв которую, строить графики гораздо легче.
Во-первых, графики ggplot многослойные, то есть строятся они поэтапно, по слоям. Сначала указывается датафрейм, с которым мы работаем, и интересующие нас показатели (первый слой), затем указывается тип графика (второй слой), затем настройки для подписей, легенды и прочее (остальные слои). Все слои добавляются через +.
Во-вторых, для любого графика указывается функция aes, сокращенно от aesthetics, в качестве аргументов которой задаются переменные интереса (которые хотим отобразить на графике), а также элементы оформления графика, которое непосредственно связано с переменными в датафрейме. О чём речь? Проще понять на примере построения графика функции.
ggplot(data = df, aes(x = x, y = y)) +
geom_line()
но весьма примитивно. А все дело в том, что мы еще даже не использовали возможности настройки цвета графика, толщины линии, определенный цвет координатной сетки, названия графика. Давайте все это реализуем в следующем скрипте:
ggplot(data = df, aes(x = x, y = y)) +
geom_line(linewidth = 1, colour = 'red')+
ggtitle('f(x)=9-x^2')+
theme_linedraw()
не идеально. Нанесем линии осей ОХ и ОУ, а еще изменим шаг координатной сетки на 1. Последнее можно задать с помощью: geom_hline() — для горизонтальных линий. Формат функции: geom_hline(yintercept, linetype, color, size) Она рисует горизонтальную линию на текущем графике в указанных координатах по оси Y. scale_x_continuous(breaks = seq(start, stop, step))
ggplot(data = df, aes(x = x, y = y)) +
geom_line(linewidth = 1, colour = 'red')+
ggtitle('f(x)=9-x^2')+
scale_x_continuous(breaks = seq(-4, 4, 0.5)) +
scale_y_continuous(breaks = seq(-7, 10, 1)) +
geom_vline(xintercept = 0,linewidth = 1)+
geom_hline(yintercept = 0,linewidth = 1)+
theme_linedraw()
пересечения графиков. Для построения второго графика нам нужно создать новый датасет и добавить к скрипту еще один слой где будет построен линейный график (обязательно с указанием нового датасета и новой переменной пусть будет у1:data = df1, aes(x = x, y = y1)
y1 = x+9
df1 = data.frame(x, y1)
ggplot(data = df, aes(x = x, y = y)) +
geom_line(linewidth = 1, colour = 'red')+
geom_line(data = df1, aes(x = x, y = y1),linewidth = 1)+
ggtitle('f(x)=9-x^2')+
scale_x_continuous(breaks = seq(-4, 4, 0.5)) +
scale_y_continuous(breaks = seq(-7, 10, 1)) +
geom_vline(xintercept = 0,linewidth = 1)+
geom_hline(yintercept = 0,linewidth = 1)+
theme_linedraw()
координатная сетка. По сути, нам нужно узнать точки пересечения, и поэтому нет необходимости строить по «старому» системе. Воспользуемся командами xlim и ylim, которые позволяют изменить пределы осей
y1 = x+9
df1 = data.frame(x, y1)
ggplot(data = df, aes(x = x, y = y)) +
geom_line(linewidth = 1, colour = 'red')+
geom_line(data = df1, aes(x = x, y = y1),linewidth = 1)+
ggtitle('f(x)=9-x^2')+
scale_x_continuous(breaks = seq(-4, 4, 0.5)) +
scale_y_continuous(breaks = seq(5, 10, 1)) +
ylim(5, 10) +
xlim(-2, 2) +
geom_vline(xintercept = 0,linewidth = 1)+
geom_hline(yintercept = 0,linewidth = 1)+
theme_linedraw()
Теперь очень наглядно видны координаты этих двух точек пересечения, которые, собственно, и являются решением системы этих двух уравнений (или функций, которые мы задали). x1=−1,y1=8;x2=0,y2=9
# ggplot plt best
library(ggplot2)
options(scipen = 999, digits = 10)
f = function(x) 9-x^2
x = seq(-4, 4, 0.1)
y = f(x)
df = data.frame(x, y)
ggplot(data = df, aes(x=x, y=y))+
ggtitle('y(x)=9-x^2')+
xlab('OX')+
ylab('OY')+
scale_x_continuous(breaks = seq(-4, 4, 0.5)) +
scale_y_continuous(breaks = seq(-7, 10, 1)) +
geom_vline(xintercept = 0,linewidth = 1)+
geom_hline(yintercept = 0,linewidth = 1)+
geom_line(linewidth = 1.2,colour = 'red') +
theme(
panel.background = element_rect(fill = "white",
color = "black",
size = 0.5, linetype = "solid"),
panel.grid.major = element_line(size = 0.5, linetype = 'longdash', color = "grey50"),
panel.grid.minor = element_line(size = 0.25, linetype = 'longdash', color = "grey50")
)





