2012-03-14 47 views
4

我正在嘗試繪製一堆用於不同數據集和不同算法的ROC區域。 我有三個變量:「Scheme」指定使用的算法,「Dataset」是算法正在測試的數據集,以及「Area_under_ROC」。微調R格子包中的點圖

我使用R中的晶格庫,以下命令:

點陣圖(方案〜Area_under_ROC |數據集,數據= simulationSummary,佈局= C(4,6))

,這就是我得到:

dotplot of Scheme vs. Area_under_ROC conditioned on Dataset

我想知道什麼是

  • 如何使y軸上的標籤可讀?現在,他們都擠在一起。
  • 我該如何重新排列面板,使得標有「100」的數據集形成最後一列,但其他列保持不變?

我非常感謝任何意見或建議。 非常感謝!

回答

9

一些想法:

  1. 使用用於Y軸的標籤,例如更小的字體大小scale=list(y=list(cex=.6))。另一種方法是保留統一的字體大小,但是在多個頁面上分開輸出(可以用layout=來控制),或者更好地顯示來自同一數據集的所有數據(從A到F,因此每個算法有4個點)或採用group=選項的樣本大小(10到100,因此每個算法有6個點)。我個人會爲此創建兩個因素,sample.sizedataset.type
  2. 顯示您的因子Dataset,以便您感興趣的數據集出現在layout將放置它們的位置,或(更好)使用index.cond爲您的24個面板指定特定排列。例如,

    dfrm <- data.frame(algo=gl(11, 1, 11*24, labels=paste("algo", 1:11, sep="")), 
            type=gl(24, 11, 11*24, labels=paste("type", 1:24, sep="")), 
            roc=runif(11*24)) 
    p <- dotplot(algo ~ roc | type, dfrm, layout=c(4,6), scale=list(y=list(cex=.4))) 
    

    將安排按順序面板,從底部左(在右上面板左下面板,type24type1)到右上,而

    update(p, index.cond=list(24:1)) 
    

    將安排在反向板訂購。只需指定一個list與預期的面板位置。


這裏是我心目中有1點的例子和使用兩個方面因素,而不是一個。讓我們產生另一人爲數據集:

dfrm <- data.frame(algo=gl(11, 1, 11*24, labels=paste("algo", 1:11, sep="")), 
        dataset=gl(6, 11, 11*24, labels=LETTERS[1:6]), 
        ssize=gl(4, 11*6, 11*24, labels=c(10,25,50,100)), 
        roc=runif(11*24)) 
xtabs(~ dataset + ssize, dfrm) # to check allocation of factor levels 
dotplot(algo ~ roc | dataset, data=dfrm, group=ssize, type="l", 
     auto.key=list(space="top", column=4, cex=.8, title="Sample size", 
         cex.title=1, lines=TRUE, points=FALSE)) 

enter image description here

+0

非常感謝CHL!我非常感謝你的幫助。編輯結束後,我還沒有嘗試過您的評論,但您的原始建議像魅力一樣起作用。儘管y軸上的標籤非常小。我必須找出一種方法使它們更具可讀性。我在原始文章中沒有說明的一件事是,數據集名稱中的字母后面的數字不表示大小,而是數據中的信號量。 A100是全部信號且無噪音,但A10的噪音爲90%,信號爲10%。數據集大小相同。許多人再次感謝。 – user765195 2012-03-15 01:44:34

5

此外,以chl answer分裂Dataset類型,類型和大小,你可以使用useOuterStrips功能從latticeExtra包後。

要獲得更多標籤空間,您可以「轉置」陰謀。

# prepare data: 
simulationSummary$Dataset_type <- substr(simulationSummary$Dataset, 1, 5) 
simulationSummary$Dataset_size <- substr(simulationSummary$Dataset, 6, 10) 

# to gets proper order force factor levels: 
simulationSummary$Dataset_size <- factor(simulationSummary$Dataset_size, 
    levels = c("10", "25", "50", "100")) 

library(latticeExtra) 
useOuterStrips(dotplot(
    Scheme ~ Area_under_ROC | Dataset_type*Dataset_size, 
    data = simulationSummary, 
    layout = c(4,6) 
)) 

Dotplot

或者使用垂直點陣圖:

useOuterStrips(dotplot(
    Area_under_ROC ~ Scheme | Dataset_size*Dataset_type, 
    data = simulationSummary, horizontal=FALSE, 
    layout = c(4,6), scales=list(x=list(rot=90)) 
)) 

enter image description here

+0

非常感謝Marek!我非常感謝您的意見。標籤尺寸實際上是一個問題,這有望幫助我解決問題。 – user765195 2012-03-15 01:48:51

+0

(+1)我總是忘記外帶! – chl 2012-03-15 07:43:31