You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:32:05