![](/img/trans.png)
[英]ggplot2 - x-axis ticks and labels not compatible with regression line (geom_smooth and geom_abline)
[英]Add regression line with geom_smooth to plot with discrete x-axis in R
我想在 R 中添加一條從線性 model 到 plot 的回歸線。
我創建了以下示例數據集:
# Load libraries
library(tidyverse)
library(ggbeeswarm)
# Set seed
set.seed(123)
# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)
df <- data.frame(ID, baseline) %>%
mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4),
`2` = `1` - rnorm(1, mean = 7, sd = 5),
`3` = `2` - rnorm(1, mean = 10, sd = 9)) %>%
pivot_longer(-ID) %>%
rename(time = name) %>%
mutate(time = as.factor(time))
這會創建以下 plot:
# Plot
ggplot(data = df, aes(x=time, y = value)) +
geom_quasirandom() +
theme_classic() +
scale_x_discrete(limits = c("baseline", "1", "2", "3") ) +
labs(x = "Time", y = "Value")
如果我將geom_smooth(method = 'lm')
添加到 plot,什么也不會發生,我認為這與time
是一個因素有關。 但是,添加geom_smooth(method = 'lm', formula = y~as.numeric(x)
也不起作用。
我如何 plot 在此圖的頂部添加一條回歸線?
EDIT1.0:我已經能夠使用 geom_smooth 到 plot 回歸線geom_smooth(aes(x = as.numeric(time), y = value), method = "lm", formula = y~x)
,但遺憾的是, 回歸線不正確...
如何使用有序因子啟用與aes(as.numeric(time), value)
的疊加?
# Load libraries
library(tidyverse)
library(ggbeeswarm)
# Set seed
set.seed(123)
# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)
df <- data.frame(ID, baseline) %>%
mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4),
`2` = `1` - rnorm(1, mean = 7, sd = 5),
`3` = `2` - rnorm(1, mean = 10, sd = 9)) %>%
pivot_longer(-ID) %>%
rename(time = name) %>%
# create ordered factor to allow synchronized order of x after as.numeric
mutate(time = factor(time, ordered = T, c("baseline", "1", "2", "3")))
## rendered results
ggplot(data = df, aes(x=time, y = value)) +
geom_quasirandom() +
theme_classic() +
labs(x = "Time", y = "Value") +
geom_smooth(aes(as.numeric(time), value), method = "lm")
## verify with this
ggplot(data = df, aes(x=time, y = value)) +
geom_point() +
theme_classic() +
labs(x = "Time", y = "Value") +
geom_smooth(aes(as.numeric(time), value), method = "lm")
由reprex package (v0.3.0) 創建於 2020-04-15
試試這個。 添加回歸線的一種選擇是手動計算它並通過group
美學上的geom_line
和映射ID
將其添加到 plot。 紅線是value ~ time
的回歸線,而在藍線的情況下,我將時間重新編碼為數字,將“基線”設置為 0。
# Load libraries
library(tidyverse)
library(ggbeeswarm)
# Set seed
set.seed(123)
# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)
df <- data.frame(ID, baseline) %>%
mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4),
`2` = `1` - rnorm(1, mean = 7, sd = 5),
`3` = `2` - rnorm(1, mean = 10, sd = 9)) %>%
pivot_longer(-ID) %>%
rename(time = name) %>%
mutate(time = as.factor(time),
time1 = ifelse(time == "baseline", 0, as.numeric(time)),
smooth = predict(lm(value ~ time, data = .)),
smooth1 = predict(lm(value ~ time1, data = .)))
# Plot
ggplot(data = df, aes(x=time, y = value)) +
geom_quasirandom() +
# Regression line
geom_line(aes(x = time, y = smooth, group = ID), color = "red") +
geom_line(aes(x = time, y = smooth1, group = ID), color = "blue") +
theme_classic() +
scale_x_discrete(limits = c("baseline", "1", "2", "3") ) +
labs(x = "Time", y = "Value")
由reprex package (v0.3.0) 創建於 2020-04-15
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.