Как нарисовать разные цвета на графике с кодом r в зависимости от оси x - PullRequest
0 голосов
/ 09 февраля 2020

Я не знаю, возможно ли это в rstudio. Я просто хочу построить 2 или более цветов, например; с этим простым кодом,

fun <-function (x) {x^2}

plot(fun, xlim = c(-1,1))

как я могу построить его таким образом, чтобы он отображался для x (-1,0) синего и для x (0,1) красного, например?

Я не хочу делать 2 кривые, я просто хочу сделать одну и изменить ее цвет, потому что она мне нужна для более сложного случая (диаграмма Фейгенбаума), поэтому я не хочу отделять функцию, спасибо .

Ответы [ 2 ]

3 голосов
/ 09 февраля 2020

ggplot2 имеет stat_function(), который можно использовать для рисования функции. Раскраска может контролироваться путем доступа к вычисляемой переменной x. data.frame указывает диапазон по оси X.

library(ggplot2)
ggplot(data.frame(x = c(-1, 1)), aes(x, colour = stat(x > 0))) +
  stat_function(fun = ~ .x^2) +
  scale_colour_manual(guide = "none", values = c("blue", "red"))

enter image description here

Видимо, цвет не переключается точно на x == 0. Поэтому нам может потребоваться увеличить количество точек данных, для которых вычисляется функция:

library(ggplot2)
ggplot(data.frame(x = c(-1, 1)), aes(x, colour = stat(x > 0))) +
  stat_function(fun = ~ .x^2, n = 500) +
  scale_colour_manual(guide = "none", values = c("blue", "red"))

enter image description here

1 голос
/ 09 февраля 2020

С функцией это довольно сложно, но вы можете создать временный фрейм данных со значениями для построения графика, а затем назначить цвет каждому значению. Это было бы так:

fun <-function (x) {x^2}
fun_col <- function(x) ifelse(x<0,'blue','red')

data_plot = data.frame(x=seq(-1,1,by = 0.01),y = fun(seq(-1,1,by = 0.01)),
                   col =fun_col(seq(-1,1,by = 0.01)))

library(ggplot2)
ggplot(data_plot, aes(x = x, y = y))+
  geom_line(color = data_plot$col, lwd =2)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...