如何修改ggplot代码实现test1蓝色填充、test2仅边框的散点图?
解决方案
可以通过以下修改实现需求:
AUC= c(0.95,0.897,0.595,0.281,0.6872,0.6844,0.9718,0.7748, 0.807,0.901,0.801,0.982,0.7856,0.7828,0.6748,0.7579 ) roc_alc_lab= c(rep("AUD_Joint_test1",4),rep("AUD_Univariate_test1",4), rep("AUD_Joint_test2",4),rep("AUD_Univariate_test2",4) ) Setting=c("1","2","3","4","1","2","3","4" ,"1","2","3","4","1","2","3","4" ) data_alc_roc=data.frame(Setting,AUC,roc_alc_lab) p2=data_alc_roc |> transform( Model = sub("AUD[^_]*_(.*)_.*$", "\\1", roc_alc_lab), Test_data = sub(".*_", "", roc_alc_lab) ) |> ggplot(aes(x = Setting, y = AUC, group = roc_alc_lab)) + # 新增fill映射到Test_data,使用支持填充的形状 geom_point(aes(color = Test_data, shape = Model, fill = Test_data), size=3) + # 保持原有的颜色设置:test1蓝色,test2红色(边框色) scale_color_manual(values = c(test1 = "blue", test2 = "red")) + # 设置填充色:test1蓝色填充,test2无填充(NA表示透明) scale_fill_manual(values = c(test1 = "blue", test2 = NA)) + # 为Model分配支持填充的形状(21=带填充的圆形,22=带填充的方形) scale_shape_manual(values = c(Joint = 21, Univariate = 22)) + # 调整图例标签,合并填充与颜色的图例 labs(color = "Test Data", shape = "Model", fill = "Test Data") + guides(fill = guide_legend(override.aes = list(shape = 21)))
关键修改说明:
- 在
geom_point中新增fill = Test_data的映射,用于控制点的填充色 - 使用
scale_fill_manual设置test1为蓝色填充,test2为NA(透明无填充) - 通过
scale_shape_manual为不同Model分配支持填充的形状(如21、22这类带边框和填充区域的形状,默认形状如16是实心无单独边框的) - 调整图例设置,确保填充和颜色的图例合并显示更清晰
内容的提问来源于stack exchange,提问作者student_R123
相关产品推荐
相关产品推荐

