如何在R语言龙卷风图中让负向条形旁数值显示为正数?
解决龙卷风图负向条形标签显示正数的问题
问题说明
使用ggplot2绘制龙卷风图时,零值左侧(Populacija为HM组)的条形对应的数值标签带有负号,需要将这些负号去掉,统一显示为正数。
解决方案
核心思路是在生成标签文本时,对Troskovi字段取绝对值后再格式化输出,这样既保留条形的正负方向(用于区分左右两组),又能让所有标签显示为正数。
修改后的完整代码
# 数据处理代码 T_Zbirna_sa_BlokadomON_za_Tornado$Troskovi <- abs(T_Zbirna_sa_BlokadomON_za_Tornado$Troskovi) * ifelse(T_Zbirna_sa_BlokadomON_za_Tornado$Populacija == "EM", 1, -1) # 计算标签对齐方式 T_Zbirna_sa_BlokadomON_za_Tornado$lab_hjust <- ifelse(T_Zbirna_sa_BlokadomON_za_Tornado$Populacija == "EM", -0.1, 1.1) # 重新排序因子水平 T_Zbirna_sa_BlokadomON_za_Tornado$Usluge <- reorder(T_Zbirna_sa_BlokadomON_za_Tornado$Usluge, T_Zbirna_sa_BlokadomON_za_Tornado$Troskovi, FUN = \(x) sum(abs(x))) # 龙卷风图绘制代码(关键修改已标注) ggplot(T_Zbirna_sa_BlokadomON_za_Tornado, aes(x = Troskovi, y = Usluge, fill = Populacija)) + geom_col() + geom_text( aes( label = format(floor(abs(Troskovi)), big.mark="."), # 此处添加abs()取绝对值 hjust = lab_hjust ), size = 5 ) + scale_x_continuous( expand = expansion(mult = 0.25), labels=human_numbers ) + labs(title="...\n", x ="...", y = "...") + scale_fill_manual(values=c("#0F6D96", "#1C92F4")) + theme(axis.text.x=element_text(size=15), axis.text.y=element_text(size=15), axis.title.x=element_text(size=18,face="bold"), axis.title.y=element_text(size=18,face="bold"), legend.text=element_text(size=15), legend.title=element_text(size=15), plot.title = element_text(size = 20, hjust = 0.5))
关键修改点
在geom_text的label参数中,将floor(Troskovi)替换为floor(abs(Troskovi)),通过abs()函数把负数转换为正数,确保所有标签都显示为正数值,同时条形的左右方向不受影响(因为x轴映射仍使用原始的正负Troskovi值)。
内容的提问来源于stack exchange,提问作者newtoR
相关产品推荐
相关产品推荐

