Lattice xyplot() Добавление другой средней линии тренда к каждой панели?
У меня есть простая решетка рассеивания решетки. Две панели - мужчина/женщина. ID - уникальный номер для каждого участника. Var1 - это общее время тестирования. Среднее значение - это вектор двух чисел (средство для пола).
Нет точки, включая линию наилучшего соответствия, так что я хочу построить линию тренда на каждой панели. Две панели имеют разные средства, например, мужчина = 1 минута, женщина = 2 минуты.
xyplot(var1 ~ ID|Gender, data=DF,
group = Gender,
panel=function(...) {
panel.xyplot(...)
panel.abline(h=mean.values)
})
В тот момент, когда график выходит, так что обе линии тренда появляются на каждой панели. Я хочу только одну линию тренда в каждом.
У кого-нибудь есть способ сделать это?
Я пробовал несколько различных способов, включая длинный код для функции Addline, который просто не работает для меня. Я просто хочу определить, на какой панели я смотрю, и я посмотрел на? Panel.number, но не уверен, как это работает, поскольку я думаю, что у меня нет текущей строки. (Current.row (префикс)).
Должен быть простой способ сделать это?
[EDIT - Вот фактические данные, я использую] Я попытался упростить DF
library(lattice)
dput(head(DF))
structure(list(ID = 1:6, Var1 = c(2333858, 4220644,
2941774, 2368496, 3165740, 3630300), mean = c(2412976, 2412976,
2412976, 2412976, 2412976, 2412976), Gender = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = c("1", "2"), class = "factor")), .Names = c("ID",
"Var1", "mean", "Gender"), row.names = c(NA, 6L), class = "data.frame")
dput(tail(DF))
structure(list(ID = 161:166, Var1= c(2825246, 3552170,
3688882, 2487760, 3849108, 3085342), mean = c(3689805, 3689805,
3689805, 3689805, 3689805, 3689805), Gender = structure(c(2L,
2L, 2L, 2L, 2L, 2L), .Label = c("1", "2"), class = "factor")), .Names = c("ID",
"Var1", "mean", "Gender"), row.names = 109:114, class = "data.frame")
сюжет я использую:
xyplot((Var1/1000) ~ ID|Gender, data=DF,
group = Gender,scales=list(x=list(at=NULL)),
panel=function(...) {
panel.xyplot(...)
panel.abline(h=mean.values) })
причины 2 строки.
[EDIT - это код, который включает в себя функцию AddLine & везде на всех постах и, кажется, не работает для меня]
addLine<- function(a=NULL, b=NULL, v = NULL, h = NULL, ..., once=F) { tcL <- trellis.currentLayout() k<-0 for(i in 1:nrow(tcL)) for(j in 1:ncol(tcL)) if (tcL[i,j] > 0) { k<-k+1 trellis.focus("panel", j, i, highlight = FALSE) if (once) panel.abline(a=a[k], b=b[k], v=v[k], h=h[k], ...) else panel.abline(a=a,b=b, v=v, h=h, ...) trellis.unfocus() } }
затем писать после решетчатого участка (mean.values представляющий собой вектор двух чисел, средний для женщин, средний для мужчин)
addLine(v=(mean.values), once=TRUE)
Обновление - мне удалось сделать это в ggplot2. Сделать ggplot используя facet_wrap затем -
hline.data <- data.frame(z = c(2413, 3690), Gender = c("Female","Male"))
Это создает DF двух средств и Пол, 2х2 DF
myplot <- myplot + geom_hline(aes(yintercept = z), hline.data)
Это добавляет строки в ggplot.
Является ли «mean.values» средством e 'var1' значения? Это поможет, если вы предоставили [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) с примерными входными данными. – MrFlick
Да, это правильно - среднее значение var1. Скоро я получу данные, просто задаваясь вопросом, не пропадет ли что-то что-то очевидное. – Rachel