這裏是一個hacky解決方案。它涉及party
包的繪圖功能原始源代碼的很少修改。通過閱讀源代碼,我注意到有一個terminal_panel
,如果結果是一個因素,則調用node_barplot
。 (如果您安裝了源碼包,則所有內容都位於R/plot.R
函數中。)我們可以修改稍後在默認條形圖中顯示自定義標籤。
在r提示只需發出以下命令:
fixInNamespace("node_barplot", pos="package:party")
,然後,開始添加我們想要的東西:
- 添加
labels = NULL, gp = NULL
到該函數的參數現有列表。
接近功能體的端,grid.rect(gp = gpar(fill = "transparent"))
後,添加下列行:
if (!is.null(labels)) {
labs <- as.character(labels[[email protected]==node$nodeID])
len <- length(labs)
x <- unit(rep(0.5, len), "npc")
y <- unit(0.5:len/len, "npc")
for (i in 1:len)
grid.text(labs[i], x=x[i], y=y[i], just="center", gp=gp)
}
在此,關鍵思想是選擇對應於所選擇的節點(node$nodeID
)標籤,並且我們可以抓住此來自ctree
對象的插槽where
的信息(這是指示每個情況在哪個節點結束的向量)。 if
測試只是爲了確保我們可以使用最初編寫的功能。參數gp
可用於更改字體大小或顏色。
到函數的典型的呼叫現在將是:
plot(cfit, tp_pars=list(labels=dfrm$names))
其中dfrm$names
是標籤的來自名爲dfrm
的數據幀的一列。這裏是您的數據說明:(我也有上線例如與iris
數據集測試此)
cfit <- ctree(young ~ age, data=a,
controls=ctree_control(minsplit=2, minbucket=2))
plot(cfit, tp_args=list(labels=a$names, gp=gpar(fontsize=8, col="darkgrey")))
來源
2012-07-12 14:11:05
chl
優秀的,正是我一直在尋找對於。 – 2012-07-31 10:06:08