Я хочу использовать ggplot2
для визуализации некоторых данных, следующих за кривой мощности. Это было задано раньше (Добавить строку тенденции тренда/мощности в 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()
. Это работает отлично, за исключением того, что мои прямые линии уже не прямые (точно так, как мне кажется, говорит мне документация).
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
Это, скорее всего, связано с тем, что мне нужно настроить мою функцию, чтобы инвертировать эффект шкал, но я не могу это понять.
Я могу сделать это только с помощью логарифмической x-шкалы:
p + scale_x_log10() + stat_function(fun = function(x)pwr(10^x))
Я не знаю, как преобразовать значения y, если я добавлю scale_y_log10()
.
Я, вероятно, пропустил нечто фундаментальное. Есть ли простой способ построить эту кривую?