我有一个像这样的数据框-
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))它由图像ML模型中的4‘文本检测结果组成。recall列根据检测到的文本的type (电话号码、电子邮件或URL)为每个模型提供召回度量值。ub和lb列具有95%置信区间召回的下限值。
目标
我想用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)然而,这给了我一条错误消息。
check_breaks_labels中的错误(中断,标签):找不到对象‘模型’
知道为什么这会是个错误吗?此外,如果有人有建议的话,我也愿意使用新的方法来绘制这些数据。谢谢!
发布于 2022-05-22 14:24:10
您的代码需要一些调整。
首先,ggplot在aes内部只使用非标准的计算,因此在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)

https://stackoverflow.com/questions/72338300
复制相似问题