Построить линейную диаграмму с условными цветами в зависимости от значений - PullRequest
11 голосов
/ 08 сентября 2011

Я хочу построить график. В зависимости от значений он должен изменить свой цвет. То, что я нашел:

plot(sin(seq(from=1, to=10,by=0.1)),type="p", 
       col=ifelse(sin(seq(from=1, to=10,by=0.1))>0.5,"red","yellow"))

Это работает. Но как только я перехожу с type = "p" на type = "l", условное окрашивание исчезает.

Это поведение предназначено?

Что такое решение с базовой графикой для построения функциональной линии с разными цветами?

Ответы [ 3 ]

16 голосов
/ 08 сентября 2011

Используйте segments вместо lines.

Функция segments добавит только существующий график. Чтобы создать пустой график с правильными осями и пределами, сначала используйте plot с type="n", чтобы нарисовать «ничего».

x0 <- seq(1, 10, 0.1)
colour <- ifelse(sin(seq(from=1, to=10,by=0.1))>0.5,"red","blue")

plot(x0, sin(x0), type="n")
segments(x0=x0, y0=sin(x0), x1=x0+0.1, y1=sin(x0+0.1), col=colour)

Подробнее см. ?segments.

enter image description here

9 голосов
/ 08 сентября 2011

Вот немного другой подход:

x <- seq(from=1, to=10, by=0.1)
plot(x,sin(x), col='red', type='l')
clip(1,10,-1,.5)
lines(x,sin(x), col='yellow', type='l')

enter image description here

Обратите внимание, что при использовании этого метода кривая меняет цвет точно на 0,5

1 голос
/ 08 сентября 2011

После того, как вы нарисовали линейный график, вы можете покрасить его в segments():

seq1 <- seq(from=1, to=10, by=0.1)
values <- sin(seq1)
s <- seq(length(seq1)-1)
segments(seq1[s], values[s], seq1[s+1], values[s+1], col=ifelse(values > 0.5, "red", "yellow"))

enter image description here

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