我已经搜索了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轴具有均匀间隔的中断,而我希望像我在上面绘制一样,将中断“拉”向零。
您描述的内容似乎与模数转换相对应,但是我不知道如何选择正确的参数来获得所需的精确转换。
这里是一个例子:
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创建
诀窍是使用新的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
相反的一种方法是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=
参数来查找所需的轴增长率。