Power BI中R ggplot瀑布图数据标签添加千分位并去小数
Power BI中R瀑布图数据标签千分位格式化解决方法
你当前的geom_text仅用sprintf实现了去小数,但未添加千分位分隔符,且直接引用dataset$Value的方式不符合ggplot的映射逻辑,导致之前的尝试失效。以下是两种可行的修改方案:
方案1:借助scales包的label_comma函数
先确保加载scales包(Power BI中需先执行library(scales)),修改geom_text部分即可:
library(scales) ggplot(dataset, aes(x = Recon_cat, fill = Increase_or_Decrease_TP ))+ geom_rect(aes(x =Recon_cat, xmin = id - 0.2 , xmax = id + 0.2, ymin = end, ymax = start ), alpha=0.95) + # 核心修改:用label_comma处理数值,自动添加千分位并去小数 geom_text(aes(x = Recon_cat, y = end, label = label_comma(accuracy = 1)(Value)), size = 11 / .pt, vjust = "top") + scale_y_continuous(labels = label_comma())+ scale_x_discrete(labels = function(Recon_cat) str_wrap(as.character(Recon_cat), width = 8)) + scale_fill_manual(values = c("Net_PD" = "#54585A", "Net_PUD" = "#A0A0A0", "Decrease" = "#F68D2E", "Increase" = "#0075BC" ))+ theme(legend.position = "none",axis.title.x=element_blank(),panel.background = element_rect(fill = "white", colour = "white", size = .25, linetype = "solid"), panel.grid.major = element_line(size = 0.25, linetype = 'solid', colour = "white"), panel.grid.minor = element_line(size = 0.25, linetype = 'dashed', colour = "white"), axis.line = element_line(colour = "black")) + labs( tag = "MMBOE")
方案2:直接使用format函数处理
无需额外包,通过round去小数后,用format添加千分位:
ggplot(dataset, aes(x = Recon_cat, fill = Increase_or_Decrease_TP ))+ geom_rect(aes(x =Recon_cat, xmin = id - 0.2 , xmax = id + 0.2, ymin = end, ymax = start ), alpha=0.95) + # 核心修改:先取整再格式化千分位 geom_text(aes(x = Recon_cat, y = end, label = format(round(Value, 0), big.mark = ",", scientific = FALSE, trim = TRUE)), size = 11 / .pt, vjust = "top") + scale_y_continuous(labels = label_comma())+ scale_x_discrete(labels = function(Recon_cat) str_wrap(as.character(Recon_cat), width = 8)) + scale_fill_manual(values = c("Net_PD" = "#54585A", "Net_PUD" = "#A0A0A0", "Decrease" = "#F68D2E", "Increase" = "#0075BC" ))+ theme(legend.position = "none",axis.title.x=element_blank(),panel.background = element_rect(fill = "white", colour = "white", size = .25, linetype = "solid"), panel.grid.major = element_line(size = 0.25, linetype = 'solid', colour = "white"), panel.grid.minor = element_line(size = 0.25, linetype = 'dashed', colour = "white"), axis.line = element_line(colour = "black")) + labs( tag = "MMBOE")
关键注意点
- 避免直接用
dataset$Value,改用aes内的映射,确保数据匹配正确; label_comma(accuracy = 1)和round(Value, 0)都能实现去除小数的效果,前者更贴合ggplot的格式化逻辑。
内容的提问来源于stack exchange,提问作者Tara
相关产品推荐
相关产品推荐

