簡體   English   中英

格子xyplot()向每個面板添加不同的平均趨勢線嗎?

[英]Lattice xyplot() Adding a different mean trend line to each panel?

在此處輸入圖片說明

我有一個簡單的網格散點圖。 兩個面板-男性/女性。 ID是每個參與者的唯一編號。 var1是總測試時間。 Mean.values是兩個數字(表示性別的均值)的向量。

沒有一點包括最佳擬合線,因此我要在每個面板中繪制均值的趨勢線。 這兩個面板具有不同的方式,例如男性= 1分鍾,女性= 2分鍾。

xyplot(var1 ~ ID|Gender, data=DF,                
                   group = Gender,
                   panel=function(...) { 
                     panel.xyplot(...) 
                     panel.abline(h=mean.values) 
                    })

在一分鍾之內,圖表就出來了,因此兩條趨勢線都出現在每個面板中。 我每個都只需要一條趨勢線。

有沒有人可以做到這一點?

我嘗試了許多不同的方式,包括Addline函數的長代碼,這對我不起作用。 我只想定義我正在看的面板,而我已經看過?panel.number,但是不確定該如何工作,因為我沒有當前行。 (current.row(前綴))。

必須有一個簡單的方法來做到這一點?

[編輯-這是我正在使用的實際數據]我試圖簡化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行。

[編輯-這是包含函數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() } } 

然后在網格圖之后寫(均值是兩個數字的向量,均值是女性,均值是男性)

addLine(v=(mean.values), once=TRUE) 

更新-我設法在ggplot2中做到了。 使用facet_wrap制作ggplot,然后-

hline.data <- data.frame(z = c(2413, 3690), Gender = c("Female","Male")) 

這將創建兩個均值和性別2x2 DF的DF

myplot <- myplot + geom_hline(aes(yintercept = z), hline.data)

這會將行添加到ggplot中。

如果您只想繪制要在繪制區域中繪制的值的平均值,則可以跳過mean.values變量,然后執行

xyplot(Var1 ~ ID|Gender, data=DF,                
    group = Gender,
    panel=function(x,y,...) { 
        panel.xyplot(x,y,...) 
        panel.abline(h=mean(y)) 
    }
)

帶有樣本數據

DF<-data.frame(
    ID=1:10, 
    Gender=rep(c("M","F"), each=5), 
    Var1=c(5,6,7,6,5,8,9,10,8,9)
)

這產生

在此處輸入圖片說明

我相信點陣對此具有特定的面板功能panel.average()

嘗試將panel.abline(h=mean.values)替換為panel.average(...)

如果那不能解決問題,我們可能需要更多信息。 嘗試在數據(例如dput(DF)或某些代表性子集)上使用dput() )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM