我有一个数据集,其中值(mean
)可以或不可以在lower.bound
和upper.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)
这会产生:
向下箭头/三角形表示下限,向上箭头/三角形表示上限,+
表示mean
。我想在剧情中添加以下内容,但不知道如何(除了明显自定义面板功能):
pch
基于mean
值是否在区间内。变量consistent
表示此(0 =在区间之外)。对于内部值,pch
应为1
,对于区间外的值,3
应为lower.bound
。 (下限和上限的pch应保持不变)upper.bound
和MP; 58.6%
之间绘制一条较粗的线。1 - with(df, tapply(consistent, list(topic, problem), mean))
## MP MT
## coke 0.5862 0.1724
## girl 0.8276 0.1724
添加到左上角的面板中。)对于1和2我的问题显然是,当我有多个y变量时,我不知道如何处理自定义面板函数(即,如何基于此编写条件面板函数)。但我找不到任何东西。
对于3,区间之外的值的比例由以下内容给出:
code
如果答案还包括x轴上水平的良好排序,肯定会是一个加号。订单可以在每个面板中改变(即,即使在彼此之上的面板中,相同的x轴刻度也可以对应于{{1}}的不同级别。但这并不重要。
答案 0 :(得分:3)
嗯,这不是真的很漂亮,但它应该得到真正的工作(告诉你如何让这种情节工作)。
基本思想是重写公式,使其在LHS上没有一堆名称(即lower.bound + mean + upper.bound
)。该语法等同于指定一个groups=
术语,最终会触发panel.superpose()
,这样可能会以您想要的方式进行自定义。
相反,我只是在LHS上包含mean
,然后在自定义面板函数中使用subscripts
来挑选upper.bound
和{{1}的匹配元素}}
我希望其余的都是非常自我解释的:
lower.bound