多个y变量的格子中的条件面板函数

时间:2012-10-10 20:43:57

标签: r lattice

我有一个数据集,其中值(mean)可以或不可以在lower.boundupper.bound给出的时间间隔内。我想用lattice来绘制这个并且已经取得了很好的成果,但仍然有三件事缺失,我不知道如何解决(我对lattice相对较新)。

df <- read.table("http://pastebin.com/raw.php?i=FQh6F12t")

require(lattice)
lattice.options(default.theme = standard.theme(color = FALSE))

head(df)
##    code topic problem mean lower.bound upper.bound consistent
## 7  A04C  coke      MP 99.5       36.45       95.95          0
## 8  A04C  coke      MT 47.5       22.78      100.00          1
## 11 A04C  girl      MP 50.0        4.75        9.75          0
## 12 A04C  girl      MT 99.5       20.00      100.00          1
## 23 A14G  coke      MP 88.5       21.25       66.75          0
## 24 A14G  coke      MT 82.5       48.36      100.00          1    

dotplot(lower.bound + mean + upper.bound ~ code | problem * topic, 
       data = df, pch = c(6, 3, 2), scales = list(x = list(draw = FALSE)),
       as.table = TRUE)

这会产生: enter image description here

向下箭头/三角形表示下限,向上箭头/三角形表示上限,+表示mean。我想在剧情中添加以下内容,但不知道如何(除了明显自定义面板功能):

  1. 条件pch基于mean值是否在区间内。变量consistent表示此(0 =在区间之外)。对于内部值,pch应为1,对于区间外的值,3应为lower.bound。 (下限和上限的pch应保持不变)
  2. 标记间隔。我想在每个x轴刻度线的upper.boundMP; 58.6%之间绘制一条较粗的线。
  3. 将区间之外的值的比例添加到面板标题(例如,1 - with(df, tapply(consistent, list(topic, problem), mean)) ## MP MT ## coke 0.5862 0.1724 ## girl 0.8276 0.1724 添加到左上角的面板中。)
  4. 对于1和2我的问题显然是,当我有多个y变量时,我不知道如何处理自定义面板函数(即,如何基于此编写条件面板函数)。但我找不到任何东西。

    对于3,区间之外的值的比例由以下内容给出:

    code

    如果答案还包括x轴上水平的良好排序,肯定会是一个加号。订单可以在每个面板中改变(即,即使在彼此之上的面板中,相同的x轴刻度也可以对应于{{1}}的不同级别。但这并不重要。

1 个答案:

答案 0 :(得分:3)

嗯,这不是真的很漂亮,但它应该得到真正的工作(告诉你如何让这种情节工作)。

基本思想是重写公式,使其在LHS上没有一堆名称(即lower.bound + mean + upper.bound)。该语法等同于指定一个groups=术语,最终会触发panel.superpose(),这样可能会以您想要的方式进行自定义。

相反,我只是在LHS上包含mean,然后在自定义面板函数中使用subscripts来挑选upper.bound和{{1}的匹配元素}}

我希望其余的都是非常自我解释的:

lower.bound

enter image description here