ggpot2:等距值之间的空间轴刻度不均匀

问题描述 投票:1回答:2

我已经搜索了SO和其他在线资源,但无济于事。

是否有一种方法可以缩放轴,以使z分数更好地反映从0到1和从1到2(或任何其他等距得分)的实际差异?

如果我的x轴的z分数在-3到3之间,并且轴刻度在每个整数之间,有没有办法使那些距0较近的轴刻度比距离较近的轴刻度小?

示例:

-3        -2     -1  0  1      2          3
|----------|------|--|--|------|----------|

我是否缺少某种轴缩放方法,该方法既可以将折点接受为值,还可以将折点相对于整个比例的位置接受?

编辑:

也许不是一个很好的代表,但这是数据的结构和可视化的基本方法:

df <-
  data.frame(
    metric = c('metric1', 'metric2', 'metric3'),
    z_score = c(2, -1.5, 2.8)
  )

df %>%
  ggplot(aes(x = metric, y = z_score)) +
  geom_col() +
  coord_flip() +
  ylim(-4,4)

[上面的代码生成了一个绘图,其中z_score轴具有均匀间隔的中断,而我希望像我在上面绘制一样,将中断“拉”向零。

r ggplot2 data-visualization axis
2个回答
2
投票

您描述的内容似乎与模数转换相对应,但是我不知道如何选择正确的参数来获得所需的精确转换。

这里是一个例子:

library(ggplot2)
library(scales)

df <- data.frame(
    metric = c('metric1', 'metric2', 'metric3'),
    z_score = c(2, -1.5, 2.8)
  )

ggplot(df, aes(x = metric, y = z_score)) +
  geom_col() +
  coord_flip() +
  scale_y_continuous(trans = modulus_trans(2),
                     limits = c(-4, 4),
                     breaks = c(-3:3))

“”

reprex package(v0.3.0)在2020-05-28创建


1
投票

诀窍是使用新的trans formation对象。 scales::中已经定义了几个,而我发现的最接近的(尽管在某种意义上是相反的)是:

ggplot(df, aes(x = metric, y = z_score)) +
  geom_col() +
  coord_flip() +
  scale_y_continuous(trans=scales::pseudo_log_trans(0.2, 2),
                     limits = c(-3, 3), breaks = -3:3)

pseudo log transform

但是我认为您想要相反的扩展。因为查看pseudo_log相反的一种方法是pseudo_exp,但我没有找到,所以尝试一下:

pseudo_exp_trans <- function(pow = 2) {
  scales::trans_new(
    "pseudo_exp",
    function(x) sign(x) * abs(x^pow),
    function(x) sign(x) * abs(x)^(1/pow))
}

ggplot(df, aes(x = metric, y = z_score)) +
  geom_col() +
  coord_flip() +
  scale_y_continuous(trans=pseudo_exp_trans(),
                     limits = c(-3, 3), breaks = -3:3)

pseudo exp transform

只需使用pow=参数来查找所需的轴增长率。

© www.soinside.com 2019 - 2024. All rights reserved.