R 绘制具有置信区间的图形

R plotting a graph with confidence intervals

我有一个看起来像这样的数据框 -

df = data.frame(recall=c(0.55,0.62,0.43,0.61,0.19,0.14,0,0.19,0.33,0.33,0,0.33),
                type= c("Phone numbers","Phone numbers","Phone numbers","Phone numbers","Emails","Emails","Emails","Emails","URLs","URLs","URLs","URLs"),
                model=c("Cognition","TS-SAR","TS-ABINet","TS-RobustScanner",
                        "Cognition","TS-SAR","TS-ABINet","TS-RobustScanner",
                        "Cognition","TS-SAR","TS-ABINet","TS-RobustScanner"),
                lb=c(0.47,0.55,0.35,0.53,
                     0.07,0.04,0,0.07,
                     0.14,0.14,0,0.14),
                ub=c(0.63,0.7,0.51,0.69,
                     0.30,0.24,0,0.3,
                     0.52,0.52,0,0.52))

它由 4 个 'text detection in image' 机器学习模型的结果组成。 recall 列具有每个模型的召回指标值,基于 type 检测到的文本(Phone 号码、电子邮件或 URL)。 ublb 列具有 95% 置信区间召回率的下限和界限值。

Objective

我想用 R 将其绘制在一张图中。

这是我尝试使用 ggplot2

pd <- position_dodge(width=0.2)

ggplot(df, aes(model,recall, color=type)) +
  geom_point(aes(shape=type),size=4, position=pd) +
  scale_color_manual(name="Type",values=c("coral","steelblue")) +
  scale_shape_manual(name="Type",values=c(17,19)) +
  theme_bw() +
  scale_x_continuous("Model", breaks=1:length(model), labels=model) +
  scale_y_continuous("Recall values") +
  geom_errorbar(aes(ymin=lb,ymax=ub),width=0.1,position=pd)

但是这给了我一个错误信息

Error in check_breaks_labels(breaks, labels) : object 'model' not found

知道为什么这可能是一个错误吗?如果有人有建议,我也愿意接受绘制这些数据的新方法。谢谢!

您的代码需要一些调整。

首先,ggplot 仅在 aes 中使用 non-standard 求值,因此在 scale_x_continuous 中使用 model 会导致“model 未找到”错误。

其次,x轴不是连续的。它是离散的。如果您根本不指定 x 轴刻度,则中断/标签将是正确的。你可以把线去掉并相信默认值。

第三,type变量有三个水平,所以你需要颜色和形状尺度的三个值。

将这些放在一起,我们有:

position <- position_dodge(width = 0.2)

ggplot(df, aes(model, recall, color = type)) +
  geom_point(aes(shape = type), size = 4, position = pd) +
  geom_errorbar(aes(ymin = lb, ymax = ub), width = 0.1, position = pd) +
  scale_color_manual("Type", values = c("coral", "steelblue", "green4")) +
  scale_shape_manual("Type", values = c(17, 19, 18)) +
  scale_y_continuous("Recall values") +
  theme_bw(base_size = 16)