[英]How to draw a power curve using ggplot2
我想使用ggplot2
來顯示一些遵循功率曲線的數據。 之前已經問過這個問題( 將exp / power trend line添加到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)
太好了,讓我們使用coord_trans()
添加一些logaritmic比例。 除了我的直線不再筆直(正如文檔告訴我期望的那樣)之外,這種方式非常有效。
p + stat_function(fun = pwr) + coord_trans(x = "log10", y = "log10")
因此,請使用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
這很可能與我必須調整我的功能以反轉音階效果的事實有關,但我無法弄明白。
我只能用logarithmix x-scale來做到這一點:
p + scale_x_log10() + stat_function(fun = function(x)pwr(10^x))
如果我添加scale_y_log10()
我不知道如何轉換y值。
我可能錯過了一些基本的東西。 有沒有一種簡單的方法來繪制這條曲線?
把我的評論寫成答案:
主要問題是stat_function
的錯誤。 當與軸變換結合使用時,它會根據變換而不是原始值計算y值。 最近在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).
如果你只改變x軸,那就更明顯了:
p + stat_function(fun = pwr) +
scale_x_log10()
如果你不能使用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.