R 如何将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") 上面返回:错误

我正在尝试学习如何将美元格式指定给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")

上面返回:
错误:提供给连续刻度的离散值
。我试图通过删除
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
的输出。即使您不将输出转换为一个因子?查看源代码,它希望输入是数字。