ggplot和错误栏

时间:2010-12-21 11:38:15

标签: r ggplot2

我正在尝试使用以下数据创建带有错误栏的绘图(最后是数据帧的输入)。我想为每个“loc”的“est A”和“est B”变量创建错误栏,但是我无法找出融合/转换数据的正确方法,这样每个“loc”就会有两行几列。

即。我想将数据帧转换为

loc est value lb ub

a A 0.56 0.26 1.20

a B 0.26 0.11 0.60

b A 0.13

b B 0.03

c A

c B

ggplot(test,aes(x=Loc,y=value,color=est))+geom_point()+geom_errorbar(aes(ymax=ub,ymin=lb))


> dput(test)
structure(list(Loc = c("a", "b", "c", "d", "e", "f", "g", "h", 
"i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s"), `est A` = c(0.563270934055709, 
0.137109873453407, 0.0946514679398302, 0.185103062070327, 0.0322566231880829, 
0.122509922923046, 0.120243043198876, 0.496530499385046, 0.469200921538171, 
0.0605252215342125, 0.102364314964088, 0.115500654388976, 0.226320301860998, 
0.553299923910439, 0.0284461712437990, 0.161231809656951, 0.129270683014873, 
0.0691902563736868, 4.22775563209408e-10), `est B` = c(0.261222076585074, 
0.0361169058045732, 0.0389295009573361, 0.0341489915400374, 0.00722206105211422, 
0.0756192543690879, 0.0638910584951127, 0.112923798991901, 0.169215410079679, 
0.0235142527703486, 0.0347964005083873, 0.0485649792804626, 0.057534910753763, 
0.142573116854277, 0.0221769276223588, 0.104198059736499, 0.0234801538140553, 
0.072563099770018, 1.93211916678252e-10), `A lb` = c(0.262976608413878, 
0.0724138165552355, 0.0496821188642757, 0.083935851825787, 0.00630380846921399, 
0.0490562081838664, 0.0467393615329014, 0.20284436584412, 0.178474018619480, 
0.0171506568665928, 0.0503363150211533, 0.0600281091658352, 0.0747597162489745, 
0.276929613768523, 0.00665167561787145, 0.0580348444006193, 0.0516432163190537, 
0.0228220757228112, 0), `A ub` = c(1.20647287629726, 0.259606775235633, 
0.180324442434493, 0.408206300913301, 0.165057321233572, 0.305948661143090, 
0.309340756132258, 1.21542708762748, 1.23351010121895, 0.213595459944227, 
0.208168853315217, 0.222235904972905, 0.685140094216929, 1.10548237017075, 
0.121651250740107, 0.447932560408103, 0.323583825296458, 0.209765826526966, 
Inf), `B lb` = c(0.111866193520147, 0.0169169666997800, 0.0186761266424921, 
0.0121471488870159, 0.00126380823047679, 0.0279532804037691, 
0.0225442254744942, 0.0369377660459994, 0.0509571176650792, 0.00592607390737984, 
0.0157043256006381, 0.0231925392578512, 0.0153998561264800, 0.0612241780775462, 
0.00507024995333768, 0.0364091610491575, 0.00745586930827693, 
0.0243798413908829, 0), `B ub` = c(0.609987442570209, 0.0771078472899858, 
0.0811466999446844, 0.0960022499146318, 0.0412706331409062, 0.204565315724654, 
0.181069310198491, 0.345223486522794, 0.561920617187038, 0.0933029341161755, 
0.0770991075408484, 0.101694652159027, 0.214954342966326, 0.332010886676128, 
0.0970003694676995, 0.298200654450461, 0.0739441103828987, 0.215973654783605, 
Inf)), .Names = c("Loc", "est A", "est B", "A lb", "A ub", "B lb", 
"B ub"), row.names = c(NA, -19L), class = "data.frame")

2 个答案:

答案 0 :(得分:5)

我调用了您的数据框数据,然后:

test <- with(Data,
   data.frame(
     Loc = rep(Loc,2),
     est = rep(c("A","B"),each=nrow(Data)),
     value = c(get("est A"),get("est B")),
     lb = c(get("A lb"),get("B lb")),
     ub = c(get("A ub"),get("B ub"))
   )
)
ggplot(test,aes(x=Loc,y=value,color=est))+geom_point()+
     geom_errorbar(aes(ymax=ub,ymin=lb))

请尽可能地使用变量名称和空格。如果你没有,你可以做到:

test <- with(Data,
   data.frame(
     Loc = rep(Loc,2),
     est = rep(c("A","B"),each=nrow(Data)),
     value = c(estA,estB),
     lb = c(Alb,Blb),
     ub = c(Aub,Bub)
   )
)
ggplot(test,aes(x=Loc,y=value,color=est))+geom_point()+
    geom_errorbar(aes(ymax=ub,ymin=lb))

答案 1 :(得分:0)

如果您想使用reshape包,我找到了以下解决方案(假设您的数据框的变量名为w / o空格):

head(df)

  Loc       estA        estB         Alb       Aub         Blb        Bub
1   a 0.56327093 0.261222077 0.262976608 1.2064729 0.111866194 0.60998744
2   b 0.13710987 0.036116906 0.072413817 0.2596068 0.016916967 0.07710785
3   c 0.09465147 0.038929501 0.049682119 0.1803244 0.018676127 0.08114670
4   d 0.18510306 0.034148992 0.083935852 0.4082063 0.012147149 0.09600225
5   e 0.03225662 0.007222061 0.006303808 0.1650573 0.001263808 0.04127063
6   f 0.12250992 0.075619254 0.049056208 0.3059487 0.027953280 0.20456532

test <- data.frame(cbind(melt(df[,1:3]), lb=c(df$Alb, df$Blb), ub=c(df$Aub, df$Bub)))
ggplot(test2,aes(x=Loc,y=value,color=variable)) + geom_point() + geom_errorbar(aes(ymax=ub,ymin=lb))

您只需熔化est-columns并将熔化的数据框与链接的下限/上限列绑定。