【问题标题】:ggpot2: space axis ticks unevenly between equidistant valuesggplot2:空间轴在等距值之间不均匀地滴答
【发布时间】:2020-05-27 20:27:19
【问题描述】:

我搜索了 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


【解决方案1】:

您描述的似乎对应于模数转换,但我不知道如何选择正确的参数以获得您想要的确切转换。

这是一个例子:

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 年 5 月 28 日创建

【讨论】:

  • 我没有玩过modulus_trans 来让它工作,很好。 (如果我之前看过它的来源,我就不会在下面写自己的了。很好。)
  • 这只是对 scales 包中的转换进行反复试验的结果。我希望我能把它作为一种更有智慧的努力来卖,但是唉!
  • 实验很聪明。
【解决方案2】:

诀窍是使用一个新的transformation 对象。 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 反面的一种方法是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)

只需使用pow= 参数即可在轴中找到您想要的增长率。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2020-10-05
    相关资源
    最近更新 更多