[英]Loop graphs ggplot y for x for different categories with linear regression, How to consequetively plot categories?
已编辑:我有一个大型数据库,试图随着时间的推移重复评估能量消耗,目的是比较多个不同的变量(0/1,例如存在严重的头部外伤与否)。 应该对数据库中的所有可用变量重复图形分析。 所有表都应导出到 PDF 文件。
目前我正在使用以下代码:
library(tidyverse)
library(ggpmisc)
my_data %>%
pdf(file="Plots.pdf" )
print(colnames(my_data) %>%
map(function(x) my_data%>%
ggplot(aes(x = Day,
y = REE,
color=as_factor(x)))+
scale_x_continuous(breaks = c(0,2,4,6,8,10,12,14,16,18,20,22,24,26,28))+
scale_y_continuous(limits= c(0000,4000))+
geom_point()+
geom_smooth(method=lm,
se=TRUE,
size=2/10,
aes(group=as_factor(x)))+
stat_poly_eq(aes(label = paste(after_stat(eq.label),
after_stat(rr.label),
after_stat(p.value.label),
sep = "*\", \"*")),
label.y="bottom", label.x="right")+
labs(x="Time [d]",
y="Resting Energy Expenditure [kcal]")+
scale_colour_grey(start=0.7,
end=0.3)+
theme_bw()
))
dev.off()
它生成包含所有图形的 PDF 文件。 但是,它不会根据 as_factor(x) 进行分组/着色,并且所有数据点都归入同一组。
是否有人对如何解决根据因子变量进行分类不起作用的问题有可能的解释?
问题是您遍历作为字符串的列名。 执行color=as.factor(x)
您正在将一个常量字符串映射到color
aes 上,即您正在执行类似color="foo"
的操作。 要告诉ggplot2
您想要 map 数据列,其名称存储在颜色 aes 上的x
中,您必须使用例如.data
代词,即执行color=as.factor(.data[[x]])
。
使用基于mtcars
的最小表示:
注意:我个人建议将您的绘图代码放在单独的 function 中,而不是将其作为匿名 function 传递给purrr::map
,如下所示。 使调试更容易,代码更干净。
library(tidyverse)
library(ggpmisc)
my_data <- mtcars
plot_fun <- function(x) {
ggplot(my_data, aes(
x = mpg,
y = hp,
color = as_factor(.data[[x]])
)) +
#scale_x_continuous(breaks = c(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28)) +
#scale_y_continuous(limits = c(0000, 4000)) +
geom_point() +
geom_smooth(
method = lm,
se = TRUE,
size = 2 / 10,
aes(group = as_factor(x))
) +
stat_poly_eq(aes(label = paste(after_stat(eq.label),
after_stat(rr.label),
after_stat(p.value.label),
sep = "*\", \"*"
)),
label.y = "bottom", label.x = "right"
) +
labs(
x = "Time [d]",
y = "Resting Energy Expenditure [kcal]"
) +
scale_colour_grey(
start = 0.7,
end = 0.3
) +
theme_bw()
}
cols <- c("cyl", "am", "gear") # colnames(my_data)
#pdf(file = "Plots.pdf")
purrr::map(cols, plot_fun)
#> [[1]]
#> `geom_smooth()` using formula 'y ~ x'
#>
#> [[2]]
#> `geom_smooth()` using formula 'y ~ x'
#>
#> [[3]]
#> `geom_smooth()` using formula 'y ~ x'
#dev.off()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.