Добавление масштаба журнала на моем графике не работает? «Не числовой c аргумент математической функции» - PullRequest
1 голос
/ 16 марта 2020

Я использую пакетик Curcurver для создания графика с сигмоидальной кривой. Он должен иметь логарифмическую шкалу c по оси Y.

Это работает для создания графика без масштаба журнала:

# install.packages("growthcurver")
library("growthcurver")
gcfit <- SummarizeGrowth(curveA$time, curveA$biomass)
gcfit
plot(gcfit)

Я пробовал plot(gcfit, log=y) и plot(gcfit, log="curveA$biomass"). Это дает мне ошибку

«Не числовой c аргумент математической функции».

Может ли быть, что я использую фрейм данных? Как мне обойти это?

my data

dput(curveA)

structure(list(time = c(1, 2, 3, 4, 5, 6, 7, 8, 17, 18, 19, 20, 
21, 22, 23, 24, 25), biomass = c(0.153333333, 1.303333333, 2.836666667, 
4.6, 6.21, 6.746666667, 7.283333333, 7.973333333, 8.663333333, 
9.046666667, 10.19666667, 10.50333333, 11.04, 11.88333333, 11.96, 
11.96, 9.966666667)), class = c("spec_tbl_df", "tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -17L), spec = structure(list(
cols = list(time = structure(list(), class = c("collector_number", 
"collector")), biomass = structure(list(), class = c("collector_number", 
"collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 1), class = "col_spec"))

1 Ответ

0 голосов
/ 16 марта 2020

Без данных, которые вы используете, трудно воспроизвести проблему (как создать воспроизводимый пример: Как создать отличный воспроизводимый пример R ), но самым простым решением вашей проблемы может быть использование log работает непосредственно с данными ...

gcfit_log <- SummarizeGrowth(curveA$time, log10(curveA$biomass))
plot(gcfit_log)

Обходной путь заключается в извлечении данных из модели и графика с использованием пакета ggplot2:

library(ggplot2)
library(dplyr)

gcfit <- SummarizeGrowth(curveA$time, curveA$biomass)

points_data <- bind_cols(t = gcfit$data$t, n = gcfit$data$N)
line_fit <- bind_cols(x = max(gcfit$data$t) * (1 : 30) / 30, 
                      y = NAtT(gcfit$vals$k, gcfit$vals$n0, gcfit$vals$r, 
                               max(gcfit$data$t) * (1 : 30) / 30))

ggplot(data = points_data, aes(t, n + 1)) +
  geom_point() +
  geom_line() +
  geom_line(data = line_fit, aes(x, y + 1), color = "red") +
  scale_y_log10()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...