【问题标题】:How do I modify labels produced by scales package?如何修改由 scales 包生成的标签?
【发布时间】:2021-06-09 20:18:29
【问题描述】:

所以我正在制作金字塔可视化。我正在使用scale_y_continuous(labels = scales::label_number_si(accuracy = 0.1)) 来制作标签。但是,我想去掉图中女性部分的负号。

我认为保留 SI 后缀但删除负号的最佳方法是修改 label_number_si 输出的标签,但 labels = abs(label_number_si()) 给出以下错误:Error in abs: non-numeric argument to mathematical function

感谢任何见解。

编辑:使用demo_continuous(c(-1e10,1e10), label = label_number_si())标签应该看起来像下面一样,除了负数前面不应该有“-”

【问题讨论】:

  • 您是否尝试将abs 放入label_number_si 中?而且问题缺少代码和数据,错误不可重现。
  • 这是负号还是 y 轴刻度?
  • @RuiBarradas 添加了一些带有demo_continuous 的代码,应该足以尝试一些事情
  • @JonSpring 感谢您提醒我摆脱​​这些。然而,问题是负面迹象。我放了一个新的屏幕截图,可以更好地显示轴

标签: r ggplot2 facet axis-labels


【解决方案1】:

我敢打赌有一个更简单的方法可以做到这一点,但我还没有想出来。

这是一个使用普通scales::label_number_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 的自定义版本,在最后一步使它们成为绝对值。为此,我在函数名称上使用命令单击 (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值标签:

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")

【讨论】:

  • 就是这样!在 scales 文档中,hadley 谈到了制作自定义标签功能,这基本上就是您所采取的步骤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多