Tôi đã bao gồm một số liệu thống kê stat_poly_eq()
trong gói ggpmisc
cho phép câu trả lời này:
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
Thống kê này hoạt động với bất kỳ đa thức nào không thiếu các thuật ngữ và hy vọng có đủ tính linh hoạt để nói chung là hữu ích. Có thể sử dụng nhãn R ^ 2 hoặc R ^ 2 đã điều chỉnh với bất kỳ công thức mô hình nào được trang bị lm (). Là một thống kê ggplot, nó hoạt động như mong đợi cả với các nhóm và các khía cạnh.
Gói 'ggpmisc' có sẵn thông qua CRAN.
Phiên bản 0.2.6 vừa được chấp nhận cho CRAN.
Nó giải quyết các bình luận của @shabbychef và @ MYaseen208.
@ MYaseen208 điều này cho thấy làm thế nào để thêm một chiếc mũ .
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 Bây giờ có thể khớp các biến trong phương trình với các biến được sử dụng cho nhãn trục. Để thay thế x bằng say z và y bằng h người ta sẽ sử dụng:
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
Là những biểu thức phân tách R bình thường, các chữ cái Hy Lạp bây giờ cũng có thể được sử dụng cả trong lhs và rhs của phương trình.
[2017-03-08] @elarry Chỉnh sửa để giải quyết chính xác hơn câu hỏi ban đầu, cho biết cách thêm dấu phẩy giữa phương trình và nhãn 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 Tôi đưa ra các ví dụ dưới đây về việc sử dụng stat_poly_eq()
với nhóm.
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 Có thể hơi phản trực giác ngay từ cái nhìn đầu tiên, nhưng để có được một phương trình duy nhất khi sử dụng nhóm, người ta cần tuân theo ngữ pháp của đồ họa. Hoặc hạn chế ánh xạ tạo nhóm thành các lớp riêng lẻ (hiển thị bên dưới) hoặc giữ ánh xạ mặc định và ghi đè lên nó bằng một giá trị không đổi trong lớp mà bạn không muốn nhóm (ví dụ:colour = "black"
).
Tiếp tục từ ví dụ trước.
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] Để hoàn thiện một ví dụ với các khía cạnh, chứng tỏ rằng trong trường hợp này, những kỳ vọng về ngữ pháp của đồ họa được đáp ứng.
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()
.