我想根据每个彩色曲线的顺序对数据集进行排序,基于y轴约为0.5的x轴值。现在,图例基于顺序。但如果您对数据进行排序,则图例应为[项目5,项目1,项目3,项目2,项目4]。
library(mirt)
dat <- expand.table(LSAT7)
mod <- mirt(dat, 1)
plt <- plot(mod, type = 'trace', facet_items=FALSE) #store the object
print(plt) #plot the object
str(plt) #find the data
plt$panel.args
pltdata <- data.frame(lapply(plt$panel.args, function(x) do.call(cbind, x))[[1]])
pltdata$item <- rep(colnames(dat), each = 50)
library(ggplot2)
ggplot(pltdata, aes(x, y, colour = item)) +
geom_line() +
ggtitle('ggplot2 Tracelines') +
xlab(expression(theta)) +
ylab(expression(P(theta))) +
geom_hline(aes(yintercept = 0.5))
答案 0 :(得分:1)
首先,您必须获取与最接近0.5的“y”值相关联的“x”值(使用dplyr),然后重新排序“item”变量的级别。
library(mirt)
dat <- expand.table(LSAT7)
mod <- mirt(dat, 1)
plt <- plot(mod, type = 'trace', facet_items=FALSE) #store the object
print(plt) #plot the object
str(plt) #find the data
plt$panel.args
pltdata <- data.frame(lapply(plt$panel.args, function(x) do.call(cbind, x))[[1]])
pltdata$item <- rep(colnames(dat), each = 50)
pltdata$item<-as.factor(pltdata$item)
library(dplyr)
aux<-pltdata %>%
group_by(item) %>%
slice(which.min(abs(y-0.5)))
aux<-aux[order(aux$x),]
ord<-as.integer(aux$item)
pltdata$item = factor(pltdata$item,levels(pltdata$item)[ord])
library(ggplot2)
ggplot(pltdata, aes(x, y, colour = item)) +
geom_line() +
ggtitle('ggplot2 Tracelines') +
xlab(expression(theta)) +
ylab(expression(P(theta))) +
geom_hline(aes(yintercept = 0.5))