R:如何同时反转和应用转换到 ggplot2 中的轴

R: how to simultaneously reverse and apply transformation to axes in ggplot2

在一个plot中,使用ggplot2包构造,例如这样一个:

ggplot(cars, aes(x = speed, y = dist))+geom_col()

可以通过应用适当的指令来转换轴。例如,+scale_y_continuous(trans="reverse")从上往下绘制坐标轴,scale_y_continuous(trans="sqrt")进行非线性变换。我需要结合这两个功能,即在顶部有轴原点,在 y 轴上有 log 或 sqrt 转换。一个一个地应用转换(即 +scale_y_reverse() ... + scale_y_log())会给出警告:Scale for 'y' is already present. Adding another scale for 'y', which will replace the existing scale.

这个怎么样:

require(scales);
rev_sqrt_trans <- function() {
    scales::trans_new(
        name = "rev_sqrt", 
        transform = function(x) -sqrt(abs(x)), 
        inverse = function(x) x^2);
}

require(ggplot2);
ggplot(cars, aes(x = speed, y = dist)) + geom_col() + scale_y_continuous(trans = "rev_sqrt")

您可以在定义新转换时优化中断,请参阅?trans_new