R 如何将y轴更改为美元格式并避免使用科学符号?
我正在尝试学习如何将美元格式指定给Y轴,并避免使用科学符号。我有R 如何将y轴更改为美元格式并避免使用科学符号?,r,ggplot2,dplyr,tidyverse,R,Ggplot2,Dplyr,Tidyverse,我正在尝试学习如何将美元格式指定给Y轴,并避免使用科学符号。我有选项(scipen=999) ggplot(diamonds, aes(y = cut_width(price, 2000, boundary = 0), x = carat)) + geom_boxplot(varwidth = TRUE) + scale_y_continuous(dollar_format()) + xlab("Carat") + ylab("Price") 上面返回:错误
选项(scipen=999)
ggplot(diamonds, aes(y = cut_width(price, 2000, boundary = 0), x = carat)) +
geom_boxplot(varwidth = TRUE) +
scale_y_continuous(dollar_format()) +
xlab("Carat") +
ylab("Price")
上面返回:
错误:提供给连续刻度的离散值
。我试图通过删除cut\u width
并简化绘图来修补代码,但毫无效果。我错过了什么?谢谢大家! 这不起作用的原因是cut\u width
返回的是一个因子而不是一个数字。因此,scales::dollar\u格式
无法工作,因为它不是一个数字。此外,不能将\u scale\u continuous
用作系数
这是一种使用dig.lab=
然后从stringr
使用str\u replace\u all
重新格式化y轴标签的方法
我们需要dig.lab=
来阻止科学符号。请参阅帮助(切割宽度)
如您所知,我们可以要求ggplot
使用函数变换y轴标签,因此我们将利用这一点并定义一个匿名函数来替换字符串。使用stringr::str\u replace\u all
,我们可以提供pattern=replacement
对的命名向量。因此,我们将(
或[
替换为$
,,替换为-$
,]
替换为零。我们需要用\
转义特殊的正则表达式字符
library(ggplot2)
library(stringr)
ggplot(diamonds, aes(y = as.factor(cut_width(price, 2000, boundary = 0, dig.lab=10)), x = carat)) +
geom_boxplot(varwidth = TRUE) +
scale_y_discrete(labels = function(x) str_replace_all(x, regex(c("[\\(\\[]" = "$", "," = " - $", "\\]" = "")))) +
xlab("Carat") +
ylab("Price")
这不起作用的原因是cut\u width
返回的是一个因子而不是一个数字。因此scales::dollar\u format
不能起作用,因为它不是一个数字。此外,不能对因子使用\u scale\u continuous
这是一种使用dig.lab=
然后从stringr
使用str\u replace\u all
重新格式化y轴标签的方法
我们需要dig.lab=
来阻止科学记数法。请参阅帮助(剪切宽度)
如您所知,我们可以要求ggplot
使用函数转换y轴标签,因此我们将利用这一点并定义一个匿名函数在字符串中进行一些替换。使用stringr::str_replace_all
,我们可以提供模式=替换
对的命名向量。因此,我们替换 (
或[
带$
,,
带-$
,和]
不带任何内容。我们需要用\
转义特殊正则表达式字符
library(ggplot2)
library(stringr)
ggplot(diamonds, aes(y = as.factor(cut_width(price, 2000, boundary = 0, dig.lab=10)), x = carat)) +
geom_boxplot(varwidth = TRUE) +
scale_y_discrete(labels = function(x) str_replace_all(x, regex(c("[\\(\\[]" = "$", "," = " - $", "\\]" = "")))) +
xlab("Carat") +
ylab("Price")
我想你应该抓住这个软件包scales
。这里的概述说它是为了在ggplot
中创建有用的标签字符串而设计的。引用label\u-dollar
标签函数设计用于标签参数
ggplot2比例。示例演示了它们与x比例的使用,
但它们在所有尺度上都起着类似的作用,包括那些产生
图例而不是轴
我想你应该抓住这个软件包scales
。它的概述说它是为了在ggplot
中创建有用的标签字符串而设计的。引用label\u-dollar
标签函数设计用于标签参数
ggplot2比例。示例演示了它们与x比例的使用,
但它们在所有尺度上都起着类似的作用,包括那些产生
图例而不是轴
这些标签由cut
生成(从cut\u width
调用),因此您需要将格式化级别名称的向量传递给标签
,或者在事件发生后对其进行一些字符串处理。不要弄乱scipen
,这几乎完全是为了在控制台中处理数字。这些标签由cut
生成(从cut\u width
调用),因此您需要将格式化级别名称的向量传递给标签
,或者在事件发生后对它们进行一些字符串处理。不要弄乱scipen
,这几乎完全是为了在控制台中处理数字。我不确定它与ggplot
集成得有多好,但formattable
包是一个qui这是一种让数值看起来像“34000,32美元”的简单方法。当然比一个怪物还要强大regex
:-)谢谢你的提醒。我想以前有另一个软件包解决了这个问题。在用10个新软件包回答一个问题和仅仅坚持OP已经使用的软件包之间,这是一个艰难的平衡。不幸的是,我认为scales::label_dollar
不适用于cut_width
的输出>。即使您不将输出转换为因子?查看源代码,它希望输入是数字。我不确定它与ggplot
的集成程度如何,但formattable
包是一种快速简便的方法,可以使数值看起来像“$34000,32”。当然,它比怪物regex
:-)谢谢你的提醒。我想以前有另一个软件包解决了这个问题。在用10个新软件包回答一个问题和仅仅坚持OP已经在使用的软件包之间,这是一个艰难的平衡。不幸的是,我认为,scales::label\u dollar
不适用于cut\u width
的输出。即使您不将输出转换为一个因子?查看源代码,它希望输入是数字。