2012-03-14 46 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