2 votes

Tracé de différents modèles pour différentes plages de valeurs x dans ggplot()

J'essaie d'afficher un modèle linéaire pour les faibles valeurs de x et un modèle non linéaire pour les valeurs de x plus élevées. Pour ce faire, je vais utiliser la DNase comme exemple :

library(ggplot2)

#Assinging DNase as a new dataframe:

data_1 <- DNase

#Creating a column that can distinguish low and high range values:

data_1$range <- ifelse(data_1$conc <5, "low", "high")

#Attempting to plot separate lines for low and high range values, and also facet_wrap by run:

ggplot(data_1, aes(x = conc, y = density, colour = range)) +
  geom_point(size = 0.5) + stat_smooth(method = "nls", 
                                       method.args = list(formula = y ~ a*exp(b*x),
                                                          start = list(a = 0.8, b = 0.1)), 
                                       data = data_1,
                                       se = FALSE) + 
  stat_smooth(method = 'lm', formula = 'y~0+x') + 
  facet_wrap(~Run) 

Cependant, comme vous pouvez le voir, il semble tracer à la fois le modèle linéaire et le modèle non linéaire pour les deux, et je n'arrive pas à trouver où mettre l'information qui lui dirait de n'en tracer qu'un pour chacun. De plus, si possible, puis-je étendre ces modèles à toute la gamme de valeurs sur l'axe des x ?

enter image description here

1voto

caldwellst Points 2477

Vous pouvez fournir des données spécifiques à chaque geom . Dans ce cas, utilisez le sous-ensemble data_1 en utilisant range de ne fournir que les données pertinentes à chaque stat_smooth() (et l'ensemble du cadre à geom_point()

ggplot(NULL, aes(x = conc, y = density, colour = range)) +
  geom_point(data = data_1, size = 0.5) + 
  stat_smooth(data = subset(data_1, range == "high"),
              method = "nls", 
              method.args = list(formula = y ~ a*exp(b*x),
                                 start = list(a = 0.8, b = 0.1)), 
              se = FALSE) + 
  stat_smooth(data = subset(data_1, range == "low"), method = 'lm', formula = 'y~0+x') + 
  facet_wrap(~Run)

enter image description here

Si vous voulez ajuster les deux modèles sur toutes les données, alors calculez-les manuellement dans data_1 et tracer manuellement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X