stat_poly_eq()
W swoim pakiecie umieściłem statystyki , ggpmisc
które pozwalają na tę odpowiedź:
library(ggplot2)
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
Ta statystyka działa z dowolnym wielomianem bez brakujących terminów i, mam nadzieję, ma wystarczającą elastyczność, aby być ogólnie użytecznym. Etykiety R ^ 2 lub dostosowane R ^ 2 mogą być używane z dowolną formułą modelu wyposażoną w lm (). Będąc statystyką ggplot, zachowuje się zgodnie z oczekiwaniami zarówno w przypadku grup, jak i aspektów.
Pakiet „ggpmisc” jest dostępny za pośrednictwem CRAN.
Wersja 0.2.6 została właśnie zaakceptowana do CRAN.
Adresuje komentarze @shabbychef i @ MYaseen208.
@ MYaseen208 pokazuje, jak dodać kapelusz .
library(ggplot2)
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
eq.with.lhs = "italic(hat(y))~`=`~",
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
@shabbychef Teraz można dopasować zmienne w równaniu do zmiennych używanych dla etykiet osi. Zastąpić X powiedzmy z Z i Y, z h można by wykorzystać:
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
eq.with.lhs = "italic(h)~`=`~",
eq.x.rhs = "~italic(z)",
aes(label = ..eq.label..),
parse = TRUE) +
labs(x = expression(italic(z)), y = expression(italic(h))) +
geom_point()
p
Będąc tymi normalnymi wyrażeniami R, pisma greckie mogą być teraz używane zarówno w lewej, jak i prawej stronie równania.
[2017-03-08] @elarry Edytuj, aby dokładniej odpowiedzieć na oryginalne pytanie, pokazując, jak dodać przecinek między etykietami równania i R2.
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = my.formula) +
stat_poly_eq(formula = my.formula,
eq.with.lhs = "italic(hat(y))~`=`~",
aes(label = paste(..eq.label.., ..rr.label.., sep = "*plain(\",\")~")),
parse = TRUE) +
geom_point()
p
[2019-10-20] @ helen.h Podam poniżej przykłady użycia stat_poly_eq()
z grupowaniem.
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y, colour = group)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
p <- ggplot(data = df, aes(x = x, y = y, linetype = group)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
[2020-01-21] @Herman Na pierwszy rzut oka może to być nieco sprzeczne z intuicją, ale aby uzyskać jedno równanie podczas korzystania z grupowania, należy postępować zgodnie z gramatyką grafiki. Ogranicz mapowanie, które tworzy grupowanie do poszczególnych warstw (pokazane poniżej), lub zachowaj domyślne mapowanie i zastąp je stałą wartością w warstwie, w której nie chcesz grupowania (np colour = "black"
.).
Kontynuując z poprzedniego przykładu.
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point(aes(colour = group))
p
[2020-01-22] Dla kompletności przykład z aspektami, pokazujący, że również w tym przypadku oczekiwania gramatyki grafiki są spełnione.
library(ggpmisc)
df <- data.frame(x = c(1:100))
df$y <- 20 * c(0, 1) + 3 * df$x + rnorm(100, sd = 40)
df$group <- factor(rep(c("A", "B"), 50))
my.formula <- y ~ x
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, formula = my.formula) +
stat_poly_eq(formula = my.formula,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point() +
facet_wrap(~group)
p
latticeExtra::lmlineq()
.