我在堆栈中搜索并搜索了我的问题的答案; 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分;只有两个方法(每个案例/控制组一个)每个位置,案例'&amp;控制每个值由x轴上的一条线连接。
答案 0 :(得分:3)
首先,将原始样本数据调整为包含多个唯一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))
如果您只想为每个GenePosition
和Var1
组合代表一个值,那么在绘图之前计算平均值会更容易。这可以通过库ddply()
中的函数plyr
来实现。
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
现在有了这个新的数据框,您只需要提供x
和y
值。应在Var1
和colour=
中使用group=
,以确保每个群组都有不同的颜色,并且这些行已连接。
ggplot(seq.long.sum,aes(x=GenePosition,y=value,colour=Var1,group=Var1))+
geom_point()+geom_line()