Квадратный график с выбросами для всех переменных с процентилем в R - PullRequest
0 голосов
/ 28 мая 2018

В моем наборе данных

comp=structure(list(MYCT = c(125L, 29L, 29L, 29L, 29L, 26L, 23L, 23L, 
23L, 23L, 400L, 400L), MMIN = c(256L, 8000L, 8000L, 8000L, 8000L, 
8000L, 16000L, 16000L, 16000L, 32000L, 1000L, 512L), MMAX = c(6000L, 
32000L, 32000L, 32000L, 16000L, 32000L, 32000L, 32000L, 64000L, 
64000L, 3000L, 3500L), CACH = c(256L, 32L, 32L, 32L, 32L, 64L, 
64L, 64L, 64L, 128L, 0L, 4L), CHMIN = c(16L, 8L, 8L, 8L, 8L, 
8L, 16L, 16L, 16L, 32L, 1L, 1L), CHMAX = c(128L, 32L, 32L, 32L, 
16L, 32L, 32L, 32L, 32L, 64L, 2L, 6L), PRP = c(198L, 269L, 220L, 
172L, 132L, 318L, 367L, 489L, 636L, 1144L, 38L, 40L), ERP = c(199L, 
253L, 253L, 253L, 132L, 290L, 381L, 381L, 749L, 1238L, 23L, 24L
)), .Names = c("MYCT", "MMIN", "MMAX", "CACH", "CHMIN", "CHMAX", 
"PRP", "ERP"), class = "data.frame", row.names = c(NA, -12L))

У меня 8 переменных.Мне нужно получить коробку, где выбросы обозначены красным кружком, а шкала с процентилями.Теперь я просто пишу

boxplot(comp$MMIN)

но этот график без выбросов.Я ожидаю что-то вроде этого expected plot

Например, на этой картинке я вижу два выброса, выше 75 процентиля.И эти графики мне нужны для каждых 8 переменных.Как это сделать?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

ни в коем случае не готовое решение, но оно должно помочь вам.

off=0.55
ggplot() + 
    geom_boxplot(data=comp,
        aes(x="",y=MMIN),
        # custom outliers
        outlier.colour="red",
        outlier.fill="red",
        outlier.size=3
    ) +
    geom_line(aes(x=c(off,off),y=c(5000,20000))) +
    geom_text(aes(x=c(off,off),y=c(5000,20000),label=c("needs to", "be calculated")))
0 голосов
/ 28 мая 2018

Вот возможное решение с использованием базовой графики.Ключ состоит в том, чтобы подавить ось Y, а затем добавить метки на основе сводной статистики.

#build the box plot and surpress the y axis lables 
b<-boxplot(comp$MMIN, yaxt="n", range=1.1)
points(x=rep(1, nrow(comp)), y=comp$MMIN)
#highlight outliers
points(x=rep(1, length(b$out)), y=b$out, col="red", pch=19)

#get the points for the y axis
myscale<-summary(comp$MMIN)
#remove the median
myscale<-myscale[-3]
#add the y-axis
axis(2, b$stats, labels=c(0, 25, 50, 75, 100))

#use this option for labels on both the right and left side
b<-boxplot(comp$MMIN, outline = FALSE)
axis(4, b$stats, labels=c(0, 25, 50, 75, 100))

enter image description here

...