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
。
在一个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
。