【问题标题】:ggplot: lineplot of means of two groupsggplot:两组均值的线图
【发布时间】:2013-02-18 02:30:14
【问题描述】:

我已经在堆栈中搜索并搜索了我的问题的答案; this one 解决了我的问题,但我未能成功修改代码以修复我的图表。

我有数据,以长格式重新整形,如下所示:

ID          Var1      GenePosition   ContinuousOutcomeVar
1           control      X20068492 0.092813611
2           control      X20068492 0.001746708
3           case         X20068492 0.069251157
4           case         X20068492 0.003639304

每个ID每个位置都有一个ContinuousOutcomeVar的值,有86个位置和10个ID。我想绘制一个折线图,其中 x 轴上的位置和 y 轴上的连续结果变量。我想要两组:病例组和对照组,所以每个位置应该有两个点:一个是病例的平均值,一个是对照的平均值。然后我想要一条连接机箱的线和一条连接控件的线。我知道这很容易,但我是 R 新手——我已经工作了 8 个小时,但我不能完全正确。以下是我所拥有的;我真的很感激一些见解。如果这存在于堆栈中的某个地方,我真的很抱歉……老实说,我仔细查看并尝试修改了很多代码,但仍然没有正确。

我的代码: 此代码绘制每个位置的所有 ID 的所有值,并将它们连接到两个组。它在每个位置的所有 10 个值的平均值处给了我一个黑点(我认为):

lineplot <- ggplot(data=seq.long, aes(x=Position, y=PMethyl, 
    group=CACO, colour=CACO)) +
    stat_summary (fun.y=mean, geom="point", aes(group=1), color="black") +      
    geom_line() + geom_point()

我无法让 R 不绘制所有 10 个点;每个位置只有两个平均值(每个病例/对照组一个),病例和控制的值每个都通过 x 轴上的线连接。

【问题讨论】:

    标签: r ggplot2 mean line-plot


    【解决方案1】:

    首先,调整您的原始样本数据以包含多个唯一的GenePosition

    dput(seq.long)
    structure(list(ID = 1:8, Var1 = structure(c(2L, 2L, 1L, 1L, 2L, 
    2L, 1L, 1L), .Label = c("case", "control"), class = "factor"), 
        GenePosition = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L
        ), .Label = c("X20068492", "X20068493"), class = "factor"), 
        ContinuousOutcomeVar = c(0.092813611, 0.001746708, 0.069251157, 
        0.003639304, 0.112813611, 0.002746708, 0.089251157, 0.004639304
        )), .Names = c("ID", "Var1", "GenePosition", "ContinuousOutcomeVar"
    ), class = "data.frame", row.names = c(NA, -8L))
    

    如果您只想为每个GenePositionVar1 组合表示一个值,那么在绘图之前计算平均值会更容易。这可以通过库plyr 中的函数ddply() 来实现。

    library(plyr)    
    seq.long.sum<-ddply(seq.long,.(Var1,GenePosition),
           summarize, value = mean(ContinuousOutcomeVar))
    seq.long.sum
         Var1 GenePosition      value
    1    case    X20068492 0.03644523
    2    case    X20068493 0.04694523
    3 control    X20068492 0.04728016
    4 control    X20068493 0.05778016
    

    现在有了这个新的数据框,您只需提供xy 值。 Var1 应在colour=group= 中使用,以确保每个组具有不同的颜色并连接线。

    ggplot(seq.long.sum,aes(x=GenePosition,y=value,colour=Var1,group=Var1))+
       geom_point()+geom_line()
    

    【讨论】:

    • 感谢您教我一些新东西!还了解到,如果我将“转换”与 ddply 一起使用而不是汇总,它会将所有其他变量保留在我的数据框中。感谢您的帮助!
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2018-06-17
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多