简体   繁体   中英

How I can make in ggplot2 my first 10 lines in red and the rest lines in blue based on example (R, ggplot2)

There were example code for E on ggplot2 library:

theme_set(theme_bw())

dat = data.frame(value = rnorm(100,sd=2.5))
dat = within(dat, { 
    value_scaled = scale(value, scale = sd(value))    
obs_idx = 1:length(value)
  })

ggplot(aes(x = obs_idx, y = value_scaled), data = dat) + 
  geom_ribbon(ymin = -1, ymax = 1, alpha = 0.1) +
  geom_line() + geom_point()

There is a question: How I can make in ggplot2 my first 10 lines in red and the rest lines in blue based on example? I tried to use some kind of layer syntax is, but it doesn't work.

First, add another column to your data frame dat . It has value 0 for the first 10 rows and 1 for the rest.

dat$group <- factor(rep.int(c(0, 1), c(10, nrow(dat)-10)))

Generate the plot:

library(ggplot2)

ggplot(aes(x = obs_idx, y = value_scaled), data = dat) +
geom_ribbon(ymin = -1, ymax = 1, alpha = 0.1) +
geom_line(aes(colour = group), show_guide = FALSE) +
scale_colour_manual(values = c("red", "blue")) +
geom_point()

The parameter show_guide = FALSE suppresses the legend for the red and blue lines.

OK, I could manage layers, the code is (not elegant, but works):

require(ggplot2)

value=round(rnorm(50,200,50),0)

nmbrs<-length(value) ##  length of vector
obrv<-1:length(value) ##  list of observations

#create data frame from the values
data_lj<-data.frame(obrv,value)
data_lj20<-data.frame(data_lj[1:20,1:2])
data_lj21v<-data.frame(data_lj[20:nmbrs,1:2])

#plot with ggplot

rr<-ggplot()+

layer(mapping=aes(obrv,value),geom="line",data=data_lj20,colour="red")+

layer(mapping=aes(obrv,value),geom="line",data=data_lj21v,colour="blue")

print(rr)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM