gpt4 book ai didi

r - 使用 ggplot 的 sec.axis 和非单调变换

转载 作者:行者123 更新时间:2023-12-03 14:04:07 25 4
gpt4 key购买 nike

我想用 ggplotsec.axis选项以生成显示转换 Z = X + sqrt( X^2 - X ) 的辅助 X 轴(称为 Z)。这种转换通常不是单调的,而是在我的应用程序中可能的 X 范围内单调(X > 1)。

我尝试了以下方法:

x1 = seq(1, 3.5, .1)
y = rnorm( n = length(x1) )

d = data.frame( x1, y )

library(ggplot2)
ggplot( d, aes( x=x1, y=y ) ) + geom_point() +
scale_x_continuous( sec.axis = sec_axis( ~ . + sqrt(.^2 - .) ) )

导致和错误和警告:
Error in f(..., self = self) : 
transformation for secondary axes must be monotonous
In addition: Warning message:
In sqrt(.^2 - .) : NaNs produced

这两者都表明它正在尝试计算 X < 1 的值的转换,即使这对于绘图来说不是必需的。

如何绘制我的有效单调变换? 我需要一个合理的通用解决方案,因为这是一个函数,其中 X 的范围部分是用户指定的(但总是 > 1)。

最佳答案

好吧,你可以欺骗 ggplot 相信它是单调的:

f <- Vectorize(function(x) {
if (x < 1) return(x/1e10)
x + sqrt(x^2 - x)
})

ggplot( d, aes( x=x1, y=y ) ) + geom_point() +
scale_x_continuous(sec.axis = sec_axis(~f(.)))

使用 expand = c(0, 0)很好,但它减少了绘图区域。

关于r - 使用 ggplot 的 sec.axis 和非单调变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44589490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com