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",也就是堆叠效果,要实现分组并排只需要做两个调整:
- 在aes映射中,将
ratio_type映射给fill(柱子填充色)属性,用于区分不同类型的指标 - 将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
相关产品推荐
相关产品推荐

