使用 ggplot 绘制包含两个测量变量和一个因素的误差条的图表

3

我知道如何为一个因素(例如实验)和一个测量(例如质量)创建带有误差线的常规图。我使用在这个网站上提供的summarySE函数来汇总数据以获取平均值和CI。例如:

   hrc_id experiment  N  quality        sd         se         ci
        0      FB_IS 77 3.584416 0.6757189 0.07700532 0.15336938
        0     FB_ACR 77 3.779221 0.6614055 0.07537416 0.15012064
        1      FB_IS 77 3.038961 0.7854191 0.08950681 0.17826826
        1     FB_ACR 77 3.129870 0.8483831 0.09668223 0.19255935
...

那么我可以这样绘制:
ggplot(d, aes(hrc_id, quality), quality, color = experiment)) + 
    geom_point(position = position_dodge(width = .5)) +
    geom_errorbar(aes(ymin = quality - ci, ymax = quality + ci), width = .5, position = "dodge")


然而,现在我需要同时处理两个测量值——不仅是质量,还有置信度。例如,我的数据可能如下所示:

hrc_id confidence confidence_ci  quality quality_ci
     0   3.573718    0.02068321 4.576923 0.02864818
     1   3.403846    0.03193104 1.658120 0.04441434
    10   3.160256    0.02520483 3.038462 0.04476492
...

我该如何在每个`hrc_id`旁边绘制`confidence`(带有`confidence_ci`)和`quality`(带有`quality_ci`)的图形?
我认为我可以对数据框进行融合(melt),以便`confidence`和`quality`成为测量变量,但这样会失去属于它们的CI值。
2个回答

2
您的数据框最终应该看起来像这样(使用melt可能是正确的工具,但我目前不记得语法):
hrc_id measurment value ci  
 0   confidence 3.573718    0.02068321 
 0   quality    4.576923    0.02864818

然后您可以使用以下命令进行绘图:

p = ggplot(d, aes(x = hrc_id, y = value, color = measurment)) +
  geom_errorbar (aes(ymin = value - ci, ymax = value + ci)) +
  geom_point(position = position_dodge(width = .5))
p

1
好的,我想我弄清楚了。我必须使用melt两次,其中ci是一个ID变量,然后将两个融合的数据框进行rbind - slhck
你的意思是需要将原始数据框分成两个数据框(分别为列1、2、3和1、4、5),对它们进行融合操作,然后使用rbind函数将结果合并在一起,对吗? - Peter Lustig
是的,没错。也许有一天我会写一个函数来包装这个工作流程。 - slhck

2

您可以使用 reshape(...) 将带有分组列的数据框一步转换为长格式。假设您的数据框名为 df:

gg <- reshape(df,idvar="hrc_id",               # idvar: identifies cases
              times=c("confidence","quality"), # group of columns to be reshaped
              timevar="measurement",           # column name to use for grouping vars
              varying=2:5,                     # columns are to be reshaped
              v.names=c("value","value.ci"),   # column names for reshaped values
              direction="long")                # convert to long format
gg
#               hrc_id measurement    value   value.ci
# 0.confidence       0  confidence 3.573718 0.02068321
# 1.confidence       1  confidence 3.403846 0.03193104
# 10.confidence     10  confidence 3.160256 0.02520483
# 0.quality          0     quality 4.576923 0.02864818
# 1.quality          1     quality 1.658120 0.04441434
# 10.quality        10     quality 3.038462 0.04476492

据我所知,您无法使用melt(...)完成此操作 - 您必须使用您评论中提到的rbind方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接