Boxplot сыртқа таңбалау R

Мен R-дағы қорапшаларды шығарып, аттар тізіміне қосқым келеді. Мен әлі күнге дейін бұл шешім .

Функция барлық қажетті функционалдылықты қамтамасыз етеді, бірақ ол жапсырмаларды қате шифрлайды. Келесі мысалда ол «o» орнына «u» деп сипаттайды:

library(plyr)
library(TeachingDemos)
source("http://www.r-statistics.com/wp-content/uploads/2011/01/boxplot-with-outlier-label-r.txt") # Load the function
set.seed(1500)
y <- rnorm(20)
x1 <- sample(letters[1:2], 20,T)
lab_y <- sample(letters, 20)
# plot a boxplot with interactions:
boxplot.with.outlier.label(y~x1, lab_y)

Сіз кез-келген шешім туралы білесіз бе? Ggplot2 кітапханасы өте жақсы, бірақ мұндай функционалдылықты қамтамасыз етпейді (менің білуімше). Менің балам - мәтін() функциясын пайдалану және сыртқы деректерді boxplot нысанынан шығару. Дегенмен, бұл сияқты жапсырмалар бір-біріне жабысып кетуі мүмкін.

Көп рақмет :-)

5
Жаңарту: Мен бұл қатені Тал Галилдің назарына жеткіздім, бірақ сағаттарда ол сценарийдің редакцияланған нұсқасын орналастырды, ол осы мәселені бұдан былай көрсетпейді.
қосылды автор Josh O'Brien, көзі

2 жауаптар

Мен оны debug (boxplot.with.outlier.label) арқылы қарап көрдім ... және бұл функцияда bug бар.

Бұл қате x , y және label_name деген жолдардан құралған DATA data.frame.

Бұдан бұрын x және y қайта реттелген, ал lab_y жоқ. x (сіздің x1 ) жеткізілген мәні өздігінен реттелмеген болса, онда сіз тәжірибеңізді бастан кешіресіз.

Шұғыл түзету ретінде x мәндерін алдын ала (мысалы, не талғампаз нәрсе жасай аласыз)

df <- data.frame(y, x1, lab_y, stringsAsFactors=FALSE)
df <- df[order(df$x1), ]
# Needed since lab_y is not searched for in data (though it probably should be)
lab_y <- df$lab_y  

boxplot.with.outlier.label(y~x1, lab_y, data=df)

Boxplot produced by procedure described above

6
қосылды
Джошқа рахмет. Бірнеше күн бұрын мен сол проблемаға айналдым, сондықтан бұл керемет көмек +1 болды
қосылды автор pssguy, көзі
Жаңарту: Бұл сұрақты Джошқа рахмет (және функциядағы сәтсіздік нүктесін анықтау) - Мен бұл мәселені шешетін жаңартылған нұсқаны жүктей алдым. Джошқа рахмет. Үздік, Тал
қосылды автор Tal Galili, көзі
Көмекке қуаныштымын. Кейбір басқа адамдарға арналған сияқты көрінгендіктен, сценарий авторына хат жібердім, себебі ол сценарийде қателер тапса, пайдаланушылардан сұраған.
қосылды автор Josh O'Brien, көзі
Джош: рахмет. ^ _ ^
қосылды автор Federico Giorgi, көзі

Intelligent point label placement - талқыланған жеке мәселе болып табылады мұнда немесе мұнда . Онда ешқандай түпкілікті және идеалды шешім жоқ, сондықтан сізде біреуін таңдауға тура келеді.

Осылайша, сіз әдеттегі өрістерді төмендегідей жапсырмалармен толтырасыз:

set.seed(1501)
y <- c(4, 0, 7, -5, rnorm(16))
x1 <- c("a", "a", "b", "b", sample(letters[1:2], 16, T))
lab_y <- sample(letters, 20)

bx <- boxplot(y~x1)

out_lab <- c()
for (i in seq(bx$out)) { 
    out_lab[i] <- lab_y[which(y == bx$out[i])[1]]
}

identify(bx$group, bx$out, labels = out_lab, cex = 0.7)

Содан кейін, identify() кезінде іске қосылады, мұнда сипатталғандай. Аяқтағаннан кейін «STOP» батырмасын басыңыз. Әрбір шығарушының біреуден көп жапсырмасы болуы мүмкін екенін ескеріңіз! Менің шешімімде жай ғана бірінші таңдадым!

PS: Мен цикл үшін ұялып жатырмын, бірақ оны қалай векторизациялауды білмеймін - жақсартуды кейінге қалдырамын.

EDIT: шабыттанған Federico's сілтемесі енді оны оңайырақ көруге болады! Тек осы 2 команда:

boxplot(y~x1)
identify(as.integer(as.factor(x1)), y, labels = lab_y, cex = 0.7)
1
қосылды
Identity() шешімі жақсы, бірақ ол ауқымды емес, менің жүздеген сценарийлер бар және оларды PDF түрінде басып шығаруға тура келеді :-)
қосылды автор Federico Giorgi, көзі