【问题标题】:Continuous line across groups in ggplotggplot中跨组的连续线
【发布时间】:2014-01-08 00:25:18
【问题描述】:

我有一个时间序列的数据,其中一些数据被观察到,一些数据被模拟。我想随时间生成整个数据系列的图,颜色表示数据源。但是,我只能弄清楚如何在 ggplot 中使 geom_line() 连接同一组中的点。

这里有一个例子来说明:

# 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

在此示例中,我希望一条线从 x 轴上的 1:9 开始按顺序排列,连接所有点,但根据组更改线(和点)的颜色。

【问题讨论】:

    标签: r plot charts ggplot2 linegraph


    【解决方案1】:
    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))
    

    【讨论】:

      【解决方案2】:

      如果您只想要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"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多