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

R中将数值转换为百分比及geom_col分组柱形图绘制问题

问题1:R中将小数转换为百分比格式的方法
  • 基础R实现:直接对数值做运算后拼接百分号,可自定义保留小数位数,示例代码:
    # 保留2位小数的百分比格式
    paste0(round(your_data$percentage * 100, 2), "%")
    
  • 用scales包的percent()函数实现,输出更规范,还支持自动适配场景:
    未安装scales包可先运行install.packages("scales")安装,调用示例:
    # 直接转换向量,保留1位小数
    scales::percent(your_data$percentage, accuracy = 0.1)
    # 用于ggplot坐标轴标签的写法
    scale_y_continuous(labels = scales::percent_format(accuracy = 1))
    
问题2:实现同日期下不同ratio_type的柱子并排展示

geom_col默认位置参数为position = "stack",也就是堆叠效果,要实现分组并排只需要做两个调整:

  1. 在aes映射中,将ratio_type映射给fill(柱子填充色)属性,用于区分不同类型的指标
  2. 将geom_col的position参数设置为position_dodge(),即可实现同组柱子并排

以下是基于你提供数据集的完整可运行示例:

library(ggplot2)
library(dplyr)
library(lubridate)

# 构造数据集并转换date为日期格式
df <- tibble::tribble(
  ~date,         ~ratio_type,   ~percentage,
  "30/06/2016",  "gp",          0.25,
  "30/06/2016",  "EBIT",        0.20,
  "30/06/2017",  "gp",          0.30,
  "30/06/2017",  "EBIT",        0.18,
) %>% mutate(date = dmy(date))

# 绘制分组并排柱形图
ggplot(df, aes(x = date, y = percentage, fill = ratio_type)) +
  geom_col(position = position_dodge(width = 0.9), width = 0.8) +
  # y轴直接显示百分比格式
  scale_y_continuous(labels = scales::percent_format(accuracy = 1), name = "占比") +
  scale_x_date(date_labels = "%Y/%m/%d", name = "日期") +
  scale_fill_manual(values = c("gp" = "#2c3e50", "EBIT" = "#e74c3c"), name = "指标类型") +
  theme_minimal()

补充说明:position_dodge里的width参数控制同组柱子之间的间距,geom_col的width参数控制柱子的整体宽度,可根据展示需求自行调整数值。

内容的提问来源于stack exchange,提问作者Virajk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:54:03