Я хочу использовать ggplot2
для визуализации некоторых данных, следующих за кривой мощности. Это было задано раньше (Add exp/power trend line to a ggplot), но ответ действительно не помог.Как нарисовать кривую мощности с помощью ggplot2
Один трюк заключается в использовании 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)
Великий, давайте добавим некоторые logaritmic весы с помощью 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
Это, скорее всего, связано с тем, что я должен настроить моя функция инвертировать эффект масштаба, но я не могу это понять.
я могу сделать это с только logarithmix х масштаба:
p + scale_x_log10() + stat_function(fun = function(x)pwr(10^x))
Я понятия не имею, как конвертировать Y-значения, если добавить scale_y_log10()
.
У меня, вероятно, отсутствует что-то фундаментальное. Есть ли простой способ построить эту кривую?
Если 'ggplot2' часть не прерыватель сделки, есть пакет,' poweRlaw', что делает это: https://cran.r-project.org/web /packages/poweRlaw/index.html. – ulfelder
Глупый вопрос: do 'geom_line()' в дополнение к 'geom_point()' с исходными данными и вообще не использовать 'stat_function' ...? – joran
Две проблемы: вам необходимо установить пределы оси, чтобы избежать нулевых/отрицательных значений. Например, 'scale_x_log10 (пределы = c (1, 200)) + scale_y_log10 (пределы = c (1e-5, 1))'. Однако 'stat_function' не работает вместе с преобразованием осей: http://stackoverflow.com/questions/9382032/ggplot2-scale-x-log10-destroys-doesnt-apply-for-function-plotted-via-stat- fun – Roland