在R的ggplot2中绘制饼图时百分比位置偏移的问题排查
问题描述
使用R语言ggplot2包绘制饼图时,其他功能正常,但百分比文本无法与对应饼图扇区匹配,调整geom_text参数后问题仍未解决。相关代码及生成的饼图如下:
datE = data.frame( group = c("A","B","C","D"), value = c(41,18,30,19) ) ei <- ggplot(datE, aes(x="", y=value, fill=group))+ geom_bar(width = 1, stat = "identity") pieE <- ei + coord_polar("y") blank_themeG <- theme_minimal()+ theme( axis.title.x = element_blank(), axis.title.y = element_blank(), panel.border = element_blank(), panel.grid=element_blank(), axis.ticks = element_blank(), plot.title=element_text(size=14, face="bold") ) pieE + scale_fill_brewer("group") + blank_themeG + theme(axis.text.x=element_blank()) + geom_text(aes(y = value/3 + c(0, cumsum(value)[-length(value)]), label = percent(value/100)), size=5)

原因及解决方法
问题根源:你用来计算文本位置的公式
value/3 + c(0, cumsum(value)[-length(value)])是错误的,偏移量value/3没有依据,无法对应到每个扇区的中心位置。饼图文本的正确位置应该是当前扇区的累积和减去自身数值的一半,也就是每个扇区的中间点。修正后的代码:
把geom_text部分替换为:
geom_text(aes(y = cumsum(value) - value/2, label = percent(value/100)), size=5)
- 更清晰的写法:可以提前在数据框中计算好百分比和位置,避免在绘图代码中嵌入复杂计算:
# 先计算百分比和位置 datE <- datE %>% mutate( pct = value / sum(value), pos = cumsum(value) - value / 2 ) # 绘图时直接调用计算好的列 pieE + scale_fill_brewer("group") + blank_themeG + theme(axis.text.x=element_blank()) + geom_text(aes(y = pos, label = percent(pct)), size=5)
这样修改后,百分比文本就能准确对应到各自的饼图扇区中心位置。
内容的提问来源于stack exchange,提问作者tgV
相关产品推荐
相关产品推荐

