2016-01-17 1 views
1

Я хотел бы отобразить график кадра данных, который также содержит отрицательные значения. В этом случае отрицательные значения могут быть указаны красной линией. Однако я не смог добиться успеха. При попытке нарисовать сюжет отрицательные значения начали следовать последовательности из-за аргумента cbind. Кроме того, я не знаю другого способа комбинирования кадров данных.Как я могу указать отрицательные значения в разных цветах в блестящем с ggplot?

set.seed(123) 
tmp <- data.frame(time = 1:10, quantity = round(runif(10, -15, 25))) 

neg <- tmp$quantity[tmp$quantity <0] 
tmp.pred <- cbind(tmp,neg) 

y <- ggplot(tmp, aes(time, quantity)) + 
geom_line() + 
geom_line(data=tmp.pred, aes(y=neg),color="red") 
y 

enter image description here

+1

код дает мне ошибку, не так ли? – rawr

+0

пакет ggplot2 должен быть установлен. –

+1

@rawr прав, с вашим кодом что-то не так. с одной стороны, tmp1 <- cbind.data.frame (tmp, neg) не работает – MLavoie

ответ

1

Несколько методов, которые, я думаю, приближают вас к тому, что вы после.

library(ggplot2) 

set.seed(123) 
tmp <- data.frame(time = 1:10, quantity = round(runif(10, -15, 25))) 

Метод 1 - цвет линии по экспрессии

Это цвет линии от точки величина отрицательна, до того времени, пока величина не отрицательна снова.

ggplot(tmp, aes(time, quantity, colour=(quantity <= 0))) + 
geom_line(aes(group=1)) 

enter image description here

Метод 2 - добавление дополнительной колонки, чтобы мы могли окрасить две линии, одна полный столбец «количество», а другой только те значения, которые являются отрицательными, или либо размер отрицательного. (В противном случае они будут ожидаются)

library(dplyr) 
tmp <- tmp %>% 
    mutate(neg = ifelse(quantity <= 0, quantity, NA)) %>% 
    mutate(neg = ifelse(is.na(neg) & lag(neg) <= 0, quantity, neg)) %>% 
    mutate(neg = ifelse(is.na(neg) & lead(neg) <= 0, quantity, neg)) 

ggplot() + 
    geom_line(data=tmp, aes(x=time, y=quantity) , colour="black") + 
    geom_line(data=tmp, aes(x=time, y=neg), colour="red") 

enter image description here

Если вы хотите, чтобы только изменение цвета, когда линия пересекает x==0 линию, которую, возможно, придется манипулировать данными немного больше

0

делать ли это, что вы хотите?

library(ggplot2) 
set.seed(1) 
tmp <- data.frame(time = 1:10, quantity = round(runif(10, -15, 25))) 
tmp$series <- ifelse(tmp$quantity < 0, "Negative", "Positive") 
y <- ggplot(tmp, aes(x = time, y = quantity, colour = series)) + 
    geom_line() + 
    scale_colour_manual(values=c("red", "blue")) 
y 
+0

, если честно, это не то, что я хочу. Я не хочу видеть другую строку для отрицательных значений. Когда значение tmp меньше нуля, цвет линии следует изменить, чтобы «предупредить» или привлечь внимание пользователя. –

Смежные вопросы