【问题标题】:Fine tuning a dotplot in R's lattice package微调 R 格子包中的点图
【发布时间】:2012-03-14 03:56:49
【问题描述】:

我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域。 我有三个变量:“方案”指定使用的算法,“数据集”是正在测试算法的数据集,以及“Area_under_ROC”。

我在 R 中使用 lattice 库,命令如下:

dotplot(Scheme ~ Area_under_ROC | Dataset, data = simulationSummary, layout = c(4,6))

这就是我得到的:

dotplot of Scheme vs. Area_under_ROC conditioned on Dataset

我想知道的是

  • 如何使 y 轴上的标签可读?现在,它们都挤在一起了。
  • 如何重新排列面板,使标有“100”的数据集形成最后一列,而其他列保持不变?

我非常感谢任何 cmets 或指针。 非常感谢!

【问题讨论】:

    标签: r lattice


    【解决方案1】:

    一些想法:

    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)))
      

      将按顺序排列面板,从左下角到右上角(type1 在左下角,type24 在右上角),而

      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))
    

    【讨论】:

    • 非常感谢 chl!我真的很感谢你的帮助。编辑后我还没有尝试过你的 cmets,但你最初的建议就像一个魅力。不过,y 轴上的标签非常小。我必须想办法让它们更具可读性。我在原始帖子中没有澄清的一件事是,数据集名称中字母后面的数字并不表示大小,而是表示数据中的信号量。 A100 是全信号无噪音,但 A10 是 90% 噪音和 10% 信号。数据集的大小都相同。非常感谢再次感谢。
    【解决方案2】:

    除了chl answerDataset 类型拆分为类型和大小后,您还可以使用latticeExtra 包中的useOuterStrips 函数。

    要为标签腾出更多空间,您可以“转置”绘图。

    # 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)
    ))
    

    或者使用垂直点图:

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

    【讨论】:

    • 非常感谢马雷克!我真的很感谢你的cmets。标签大小实际上是一个问题,希望这能帮助我解决它。
    • (+1) 我总是忘记外带!
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多