【问题标题】:Multiple loess lines in rr中的多条黄土线
【发布时间】:2016-04-22 18:34:45
【问题描述】:

我可以根据一列日期和第二列值在 R 中创建一条黄土线。加载数据集后,我将下面的一列数据可视化:

scatter.smooth(x=1:length(goals$Value), y=goals$Value)

但是,如何为其他列添加多条黄土线?在一个图形中绘制所有黄土线的代码是什么?比如说,每个额外的列都被命名为 Value2、Value3、Value4 等。

【问题讨论】:

    标签: r loess


    【解决方案1】:

    如果您还没有考虑过,ggplot2 包可以显着简化此类图形问题的处理,并提供更好的图形:

    library(ggplot2)
    library(tidyr)
    
    set.seed(123)
    df <- data.frame("days"=1:25, "v1"=rnorm(25), "v2"=(rnorm(25)+0.1))
    
    #Reshape data from wide to long
    df2 <- gather(df,var,val,c(v1,v2))
    
    ggplot(df2,aes(x = days, y = val)) +
      geom_point() +
      geom_smooth(aes(colour = var),se = F)
    

    如果你不想重塑数据,你可以像这样添加单独的行:

    ggplot(df,aes(x = days, y = v1)) +
      geom_point() +  #Add scatter plot
      geom_smooth(aes(colour = 'v1'),se = F) +   #Add loess 1
      geom_smooth(aes(y = v2,colour = 'v2'),se = F) +  #Add loess 2... and so on
      scale_colour_discrete(name = 'Line',
                            breaks = c('v1','v2'),
                            labels = c('variable 1','variable 2'))    #Define legend
    

    【讨论】:

    • 除了 R 的基础知识我不太熟悉。我将安装 ggplot2 库。我的桌面上有 .csv 文件。我已将工作目录更改为桌面。那么上面的哪一段代码正在加载.csv? set.seed(123) 是什么意思?如果天数最多为 24 个月,我是否将其更改为 ' ("days"=1:24, ' ?是否应将附加列(例如 v3、v4、v5 等)添加到数据框行?最后是否需要为任何其他列复制行,例如 geom_smooth(aes(y = v3),se = F)
    • 您可以使用read.csv 读取您的csv; Imo 和我使用了一些示例数据来证明代码有效,因为您没有提供实际数据的示例来运行代码。如果您直接读取 csv,则不需要单独使用 data.frame 行。最后,是的,需要复制最后一行以添加更多黄土线。
    • 这非常有效。有没有办法让每条线都变成不同的颜色?
    • 我已经编辑了答案以包含两种方法(一种涉及使用 tidyr::gather 重塑数据集,另一种则不使用),为每行提供不同的颜色。
    【解决方案2】:

    您将使用lines 函数:

    # create test data
    set.seed(123)
    df <- data.frame("days"=1:25, "v1"=rnorm(25), "v2"=(rnorm(25)+0.1))
    # first plot
    scatter.smooth(x=df$days, y=df$v1)
    # add plot of second lowess line
    lines(loess.smooth(x=df$days, y=df$v2))
    

    为线条添加颜色:

    scatter.smooth(x=df$days, y=df$v1, lpars=list(col="red"))
    lines(loess.smooth(x=df$days, y=df$v2), col="green")
    

    【讨论】:

    • scatter.smooth 调用loess.smooth,它使用simpleLoess 函数生成平滑器。为确保其他行的创建方式相同,最好使用lines(loess.smooth(...))
    • 感谢您的提示,@eipi10。我不知道这个。我会进行编辑。
    • 这非常有效,下面的另一个答案也是如此。有没有办法让每条线都变成不同的颜色?如果是这样,R 是否将颜色识别为单词,例如“红色”、“绿色”等 - 而不是十六进制代码?
    • @user2020088 我在上面添加了代码来绘制不同颜色的线条。要查看更多可用颜色的选择,请查看?par 中的颜色规范部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2012-09-23
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多