如何将R语言中的数值转换为英镑货币格式?已尝试setClass未成功
解决R语言中数值转英镑货币格式的问题
你可以用两种简单方式实现数值转英镑格式,不用复杂的自定义类:
方法1:使用scales包的现成格式化函数
scales包提供了灵活的货币格式化工具,只需指定前缀为英镑符号即可。
- 先安装并加载scales包(未安装过的话执行安装命令):
install.packages("scales") library(scales)
- 修改你的ggplot代码,重点调整文本标签和y轴刻度的格式化逻辑:
library(tidyverse) library(ggplot2) library(scales) mydf <- data.frame( Category = c("Average"), Example1=c(73.78), Example2=c(74.32), Example3=c(74.33), Example4=c(84.02)) mydf %>% gather(Month, Total, -Category) %>% mutate(Month = reorder(Month, row_number())) %>% mutate(Category = reorder(Category, row_number())) %>% ggplot(aes(Month, Total, fill = Month, group = Category)) + geom_bar(stat = "identity", position = "dodge", width=0.5, fill="orange") + # 将标签格式化为英镑格式 geom_text(aes(label = dollar_format(prefix = "£")(Total)), position = position_dodge(width = .3), hjust=1.3, size = 4)+ coord_flip() + labs(x = "", y = "", title = "Example Title", subtitle = "Example Subtitle", legend=FALSE) + theme_bw() + theme(panel.grid.major.x = element_blank(), panel.border = element_blank(), plot.title = element_text(hjust = 0), axis.text.x = element_text(size = 10, face = "bold"), axis.text.y = element_text(size = 10, face = "bold"), legend.position = "none") + # 调整y轴刻度为英镑格式,同时修正范围(原0-30会截断数据,改成0-90更合理) scale_y_continuous(labels = dollar_format(prefix = "£"), limits = c(0, 90))
方法2:自定义简单格式化函数
如果不想额外加载包,自己写个小函数也能实现:
# 定义英镑格式化函数,强制保留两位小数 pound_fmt <- function(x) { paste0("£", sprintf("%.2f", x)) } # 替换代码中对应的部分即可: # geom_text(aes(label = pound_fmt(Total)), ...) # scale_y_continuous(labels = pound_fmt, limits = c(0, 90))
注意:你原代码中scale_y_continuous的limits = c(0, 30)会截断所有柱子(数据值都在70-80区间),建议调整为合理范围,否则图表显示会异常。
内容的提问来源于stack exchange,提问作者Bren85
相关产品推荐
相关产品推荐

