2014-11-17 5 views
0

Я хотел бы построить набор точек, связанных с одним контуром, как на первом рисунке ниже, но с цветом, установленным тем, увеличивается или уменьшается X, используя adf$up флаг, как на втором участке.Цвет пути ggplot2, получая несколько путей, когда нужен только один

Однако, когда я пытаюсь объединить два, как в третьем графике, я получаю два отдельных пути, а не один путь через все точки.

# hysteresis plotting in ggplot2 
library(ggplot2) 
set.seed(123) 
N <- 20 
adf <- data.frame(X=rnorm(N), Y=rnorm(N)) 
adf$up <- c(FALSE, diff(adf$X)>0) 
qplot(X, Y, data=adf, geom=c('point', 'path'))   # plot 1 
qplot(X, Y, data=adf, col=up, geom='point')    # plot 2 
qplot(X, Y, data=adf, col=up, geom=c('point', 'path')) # plot 3 

Я почти получить то, что я хочу, используя реальное значение цвета, как и в сюжете 4 - но я бы предпочел бинарный цвет.

adf$diff <- c(0, diff(adf$X)) 
qplot(X, Y, data=adf, col=diff, geom=c('point', 'path')) # plot 4 

Как получить двоичный цвет adf$up на пути?

ответ

1

Вы можете создать переменную, которая -1 для отрицательных значений и 1 для положительного значения, а затем использовать непрерывную цветовую гамму:

adf$diff2 <- sign(adf$diff) 
qplot(X, Y, data=adf, col=diff2, geom=c('point', 'path')) + scale_colour_gradient2(low="red",mid="black",high="green", guide="none") 

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

+0

Отличный @CathG, это точно! FYI Я могу сказать 'adf $ diff2 <- sign (adf $ diff)', чтобы получить -1/0/+ 1. – Sean

+0

@Sean, спасибо за подсказку, я отредактировал свой ответ, чтобы изменить «создание» diff2. (На самом деле, я знал эту функцию, я не знаю, почему я не думал использовать ее ...) – Cath