2014-01-08 4 views
2

У меня есть тайм-аут данных, где наблюдаются некоторые данные, и некоторые данные моделируются. Я хотел бы создать график всей серии данных с течением времени с цветом, указывающим источник данных. Однако я могу только выяснить, как сделать geom_line() в точках соединения ggplot в той же группе.Непрерывная линия по группам в ggplot

Вот пример, чтобы уточнить:

# Create sample data 
df <- data.frame(cbind(seq(1,9,1), c(1,2,3,4,5,4,3,2,1), c("obs","obs", "obs", "obs", "sim","sim","obs","sim", "obs"))) 
colnames(df) <- c("time", "value", "source") 

# Make a plot 
p <- ggplot(df, aes(x=time, y=value, group=source, color=source)) 
p + geom_point() # shows all the points in sequential order as dots 
p + geom_point() + geom_line() # connects obs to obs and sim to sim 

В этом примере, я хотел бы линию идти последовательно от 1: 9 на оси х, соединяющая все точки, но изменить цвет линии (и точек) на основе группы.

ответ

5
df <- data.frame(cbind(
         seq(1,9,1), 
         c(1,2,3,4,5,4,3,2,1), 
         c("obs","obs","obs","obs","sim","sim","obs","sim","obs"), 
         c("all","all","all","all","all","all","all","all","all"))) 

colnames(df) <- c("time", "value", "source", "group") 

ggplot(df,aes(x=time,y=value)) + 
    geom_point(aes(colour=source)) + 
    geom_path(data=df,aes(y=value,x=time,group=group,colour=source)) 

enter image description here

1

Если вы хотите только одну строку в geom_path, нет никакой необходимости фактически создать дополнительный столбец для справочных данных. Вы можете просто принудительно создать одну группу, используя любую текстовую строку непосредственно в аргументе aes. Например:

df <- data.frame(time = 1:9, 
       value = c(1:5, 4:1), 
       source = c("obs","obs","obs","obs","sim","sim","obs","sim","obs")) 


ggplot(df,aes(x=time,y=value, colour=source)) + 
    geom_point() + 
    geom_path(aes(group="all")) 

enter image description here

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