如何在R的ggplot2气泡图中移除气泡边框但保留图例边框?
解决ggplot2气泡图移除图表气泡边框但保留图例边框的问题
需求说明:用ggplot2制作气泡图时,希望移除图表内气泡的黑色边框,但保留图例中的边框;也可将图表内边框设为白色,达到近似移除的效果。
解决方案1:移除图表气泡边框(透明处理)
将图表中气泡的边框设为透明(NA),同时强制图例保留黑色边框:
library(ggplot2) library(hrbrthemes) library(viridis) library(ggrepel) # 创建数据框 data <- data.frame( Progetto = c("Progetto primo", "Progetto secondo", "Progetto terzo", "Progetto quarto", "Progetto quinto", "Progetto sesto", "Progetto settimo", "Progetto ottavo", "Progetto nono", "Progetto decimo", "Progetto undicesimo", "Progetto dodicesimo", "Progetto tredicesimo"), Impatto = c(2, 5, 3, 3, 8, 3, 5.5, 7, 4, 7, 6, 3, 7.5), `Difficoltà tecnica` = c(7.5, 3, 5, 8, 8, 5, 5, 8, 8, 6, 8, 10, 10), Durata = c(6.00, 3.00, 6.00, 6.00, 12.00, 6.00, 3.00, 6.00, 12.00, 12.00, 18.00, 24.00, 36.00) ) # 制作气泡图 ggplot(data, aes( x = Impatto, y = `Difficoltà tecnica`, size = Durata, fill = Progetto, label = Progetto )) + geom_point(alpha = 0.7, shape = 21, color = NA) + # 图表气泡设为透明边框 geom_text_repel( size = 3.5, show.legend = FALSE, box.padding = 0.7, point.padding = 0.7, max.overlaps = Inf ) + scale_size(range = c(3, 10), name = "Durata (Mesi)") + scale_fill_viridis(discrete = TRUE, option = "A", guide = FALSE) + labs( title = "Diagramma a Bolle con Viridis", x = "Impatto", y = "Difficoltà Tecnica" ) + expand_limits(x = c(0, 11), y = c(4, 11)) + theme_ipsum() + theme( plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title = element_text(size = 12) ) + guides(size = guide_legend(override.aes = list(color = "black"))) # 强制图例保留黑色边框
解决方案2:将图表气泡边框设为白色
如果需要白色边框匹配背景,仅修改geom_point的color参数为"white",其余代码与方案1一致:
# 仅修改geom_point部分 geom_point(alpha = 0.7, shape = 21, color = "white") + # 图表气泡设为白色边框
关键修改说明
- 原代码中
geom_point(color = "black")会同时作用于图表和图例的气泡边框,改为NA或"white"后,仅让图表内气泡的边框不可见 guides(size = guide_legend(override.aes = list(color = "black")))用于覆盖图例样式,确保图例气泡仍显示黑色边框,避免和图表同步变为透明/白色
内容的提问来源于stack exchange,提问作者GiacomoDB
相关产品推荐
相关产品推荐

