gpt4 book ai didi

r - 如何使用ggplot2绘制功率曲线

转载 作者:行者123 更新时间:2023-12-03 22:37:26 25 4
gpt4 key购买 nike

我想用ggplot2可视化一些遵循幂曲线的数据。之前已经问过这个问题( Add exp/power trend line to a ggplot ),但答案并没有真正帮助。

一个技巧是使用 stat_function()创建曲线。但是,我无法获得 stat_function()和我的功率曲线与对数刻度一起使用。

我说明我的问题。

创建一些示例数据和基本图:

library(ggplot2)

x <- 1:100
pwr <- function(x)x^-2.5
dat <- data.frame(x, y = pwr(x))

p <- ggplot(dat, aes(x = x, y = y)) +
geom_point()

p + stat_function(fun = pwr)

enter image description here

太好了,让我们使用 coord_trans() 添加一些对数刻度.这很完美,除了我的直线不再是直的(正如文档告诉我所期望的那样)。
p + stat_function(fun = pwr) + coord_trans(x = "log10", y = "log10")

enter image description here

所以,再试一次 coord_x_log10()coord_y_log10() ,但是这个 抛出错误 :
p + stat_function(fun = pwr) + scale_x_log10() + scale_y_log10()

Error in seq.default(min, max, by = by) :
'from' cannot be NA, NaN or infinite

这很可能与我必须调整我的函数以反转比例的效果这一事实有关,但我无法弄清楚。

我只能用对数混合 x 尺度做到这一点:
p + scale_x_log10() + stat_function(fun = function(x)pwr(10^x))

enter image description here

如果添加 scale_y_log10(),我不知道如何转换 y 值.

我可能错过了一些基本的东西。有没有一种简单的方法来绘制这条曲线?

最佳答案

将我的评论放入答案中:

主要问题是 stat_function 中的一个错误.当与轴变换结合使用时,它会根据变换后的值而不是原始值来计算 y 值。这是fixed on github最近。

但是,这并不容易看出,因为计算轴中断时会发生第一个错误,因为该错误会产生 Inf ,零和/或负 y 值。您需要设置明确的轴限制才能看到实际问题是 stat_function :

p + stat_function(fun = pwr) + 
scale_x_log10() + scale_y_log10(limits = c(1e-5, 1))
#Warning message:
#Removed 100 rows containing missing values (geom_path).

resulting plot

如果只变换 x 轴,则更加明显:
p + stat_function(fun = pwr) + 
scale_x_log10()

resulting plot

如果你不能使用来自 github 的 ggplot2 版本,你可以使用这个:
p + geom_line(data = data.frame(x = seq(min(dat$x), max(dat$x), length.out = 100)),
aes(y = pwr(x))) +
scale_x_log10() + scale_y_log10()

resulting plot

关于r - 如何使用ggplot2绘制功率曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31594142/

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