R 如何修改scales软件包生成的标签?

R 如何修改scales软件包生成的标签?,r,ggplot2,facet,axis-labels,R,Ggplot2,Facet,Axis Labels,所以我在做金字塔的可视化。我正在使用scale\u y\u continuous(labels=scales::label\u number\u si(精度=0.1))生成标签。但是,我想去掉图中女性部分的负号 我认为保留SI后缀但删除负号的最好方法是修改标签输出,通过label\u number\u SI,但是labels=abs(label\u number\u SI())给出以下错误:abs中的错误:数学函数的非数值参数 任何见解都值得赞赏 编辑:使用demo\u continuous(c

所以我在做金字塔的可视化。我正在使用
scale\u y\u continuous(labels=scales::label\u number\u si(精度=0.1))
生成标签。但是,我想去掉图中女性部分的负号

我认为保留SI后缀但删除负号的最好方法是修改标签输出,通过
label\u number\u SI
,但是
labels=abs(label\u number\u SI())
给出以下错误:
abs中的错误:数学函数的非数值参数

任何见解都值得赞赏

编辑:使用
demo\u continuous(c(-1e10,1e10),label=label\u number\u si())
标签的外观应与下面相同,但负数前面不应有“-”


我打赌有一种更简单的方法可以做到这一点,但我还没有想出办法

下面是一个使用普通
量表::label\u number\u si
复制问题结果的示例:

ggplot(data = data.frame(x = 1000*c(-5:-1, 1:5),
                         type = rep(1:2, each = 5))) +
  geom_col(aes(x,abs(x),fill = type), orientation = "y") +
  scale_x_continuous(labels = scales::label_number_si()) +
  facet_wrap(~type, scales = "free_x")

我们可以制作一个定制版本的
scales::label_number_si
,在最后一步中使它们成为绝对值。为了做到这一点,我在函数名上使用了command click(Mac OS X)来查看底层函数的代码,然后将其粘贴到一个新的函数定义中,只需稍加修改

label_number_si_abs <- function (accuracy = 1, unit = NULL, sep = NULL, ...) 
{
  sep <- if (is.null(unit)) 
    ""
  else " "
  function(x) {
    breaks <- c(0, 10^c(K = 3, M = 6, B = 9, T = 12))
    n_suffix <- cut(abs(x), breaks = c(unname(breaks), Inf), 
                    labels = c(names(breaks)), right = FALSE)
    n_suffix[is.na(n_suffix)] <- ""
    suffix <- paste0(sep, n_suffix, unit)
    scale <- 1/breaks[n_suffix]
    scale[which(scale %in% c(Inf, NA))] <- 1
    scales::number(abs(x), accuracy = accuracy, scale = unname(scale), 
           suffix = suffix, ...)
  }
}

您是否尝试过将
abs
放在
label\u number\u si
内?而且问题缺少代码和数据,错误无法再现。这是负号还是y轴勾号?@RuiBarradas添加了一些带有
demo\u continuous
的代码,应该足以尝试一些things@JonSpring谢谢你提醒我扔掉那些。然而,问题在于负面迹象。我放了一个新的屏幕截图,它更好地显示了轴线这就是它!在scales文档中,hadley谈到了定制标签函数,这基本上就是您所采取的步骤。
ggplot(data = data.frame(x = 1000*c(-5:-1, 1:5),
                         type = rep(1:2, each = 5))) +
  geom_col(aes(x,abs(x),fill = type), orientation = "y") +
  scale_x_continuous(labels = label_number_si_abs()) +
  facet_wrap(~type, scales = "free_x")