按两列中的特定值对组进行排序

时间:2017-11-17 00:02:10

标签: r ggplot2

我想根据每个彩色曲线的顺序对数据集进行排序,基于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))

enter image description here

1 个答案:

答案 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))