2017-11-17 13 views
1

y軸が約0.5であるx軸の値に基づいて、各色の曲線の順にデータセットを並べ替えたいと思います。凡例は現在、順番に基づいています。しかし、データを正しくソートすると、凡例は[item 5、item 1、item 3、item 2、item 4]のようになります。2列の特定の値でグループを並べ替える

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

ます(dplyrを使用して)0.5に最も近い「y」の値に関連した「X」の値を取得する必要があり、その後、「項目」のレベルを並べ替えるまず変数。

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)) 
関連する問題