gpt4 book ai didi

r - geom_abline 似乎不尊重 facet_grid [ggplot2] 中的组

转载 作者:行者123 更新时间:2023-12-04 04:34:28 24 4
gpt4 key购买 nike

只是想了解 geom_abline 如何与 ggplot 中的方面一起工作。

我有一个学生考试成绩数据集。这些位于具有 4 列的数据表 dt 中:

student: unique student ID
cohort: grouping factor for students (A, B, … H)
subject: subject of the test (English, Math, Science)
score: the test score for that student in that subject

目标是比较队列。以下代码段创建了一个示例数据集。
library(data.table)
## cohorts: list of cohorts with number of students in each
cohorts <- data.table(name=toupper(letters[1:8]),size=as.numeric(c(8,25,16,30,10,27,13,32)))
## base: assign students to cohorts
base <- data.table(student=c(1:sum(cohorts$size)),cohort=rep(cohorts$name,cohorts$size))
## scores for each subject
english <- data.table(base,subject="English", score=rnorm(nrow(base), mean=45, sd=50))
math <- data.table(base,subject="Math", score=rnorm(nrow(base), mean=55, sd=25))
science <- data.table(base,subject="Science", score=rnorm(nrow(base), mean=70, sd=25))
## combine
dt <- rbind(english,math,science)
## clip scores to (0,100)
dt$score<- (dt$score>=0) * dt$score
dt$score<- (dt$score<=100)*dt$score + (dt$score>100)*100

下面显示了 95% CL 的队列平均分数,按主题分面,并包括(蓝色,虚线)引用线(使用 geom_abline)。
library(ggplot2)
library(Hmisc)
ggp <- ggplot(dt,aes(x=cohort, y=score)) + ylim(0,100)
ggp <- ggp + stat_summary(fun.data="mean_cl_normal")
ggp <- ggp + geom_abline(aes(slope=0,intercept=mean(score)),color="blue",linetype="dashed")
ggp <- ggp + facet_grid(subject~.)
ggp

问题是引用线(来自 geom_abline)在所有方面都相同(= 所有学生和所有科目的总平均分)。所以 stat_summary 似乎尊重 facet_grid 中隐含的分组(例如,按主题),但 abline 没有。 谁能解释为什么?

注意:我意识到这个问题可以通过创建一个单独的组均值表并将其用作 geom_abline(如下)中的数据源来解决,但是 为什么这是必要的?
means <- dt[,list(mean.score=mean(score)),by="subject"]
ggp <- ggplot(dt,aes(x=cohort, y=score)) + ylim(0,100)
ggp <- ggp + stat_summary(fun.data="mean_cl_normal")
ggp <- ggp + geom_abline(data=means, aes(slope=0,intercept=mean.score),color="blue",linetype="dashed")
ggp <- ggp + facet_grid(subject~.)
ggp

最佳答案

这应该做你想做的。 stat_*函数对每个方面使用不同的数据集合。我认为在 aes 中的任何表达式的geom_*函数旨在用于每个 y 值的转换。

ggplot(dt,aes(x=cohort, y=score)) +
stat_summary(fun.data="mean_cl_normal") +
stat_smooth(formula=y~1,aes(group=1),method="lm",se=FALSE) +
facet_grid(subject~.) + ylim(0,100)

enter image description here

关于r - geom_abline 似乎不尊重 facet_grid [ggplot2] 中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com