在xyplot中使用auto.key生成正确的图例

时间:2014-07-04 18:32:57

标签: r plot dataframe

我意识到这可能更像是一个数据框问题,而不是一个xyplot问题 - 但是它就是这样。 我有一个数据帧数据,有108行和5列。 dat $治疗是5个级别的因素。我想创建一个xy图,只包含dat $ Treatment ==“Control”的数据。由于我不知道有什么更好的方法,我创建了tmp,如下所示。 xyplot绘制正确的图形,仅包含dat $ Treatment ==“Control”行中的数据。但是图例会显示所有数据,例如dat $ Treatment ==“High dose”

auto.key从哪里获取?我以为我的tmp数据框架甚至没有它。有人可以帮我理解吗?

 tmp <- dat[dat$Treatment=="Control",]

xyplot(tmp[,5] ~ Day, groups=tmp$Animal, data=tmp, 
       type="b", ylab="Tumor volume", 
       par.settings=simpleTheme(col=1:8,
                                pch=20,
                                cex=1.3,
                                lwd=2,
                                lty="dotted"),
       auto.key=list(title="Animal", x=.05, y=.95, 
                     corner=c(0,1), border=T, lines=T, points=F, type="b"))

2 个答案:

答案 0 :(得分:0)

我对格子包不太熟悉,所以其他经验丰富的人将不得不权衡。我的猜测是你看到这种行为是因为R处理dat $ Treatment。我猜这个变量存储为一个因子,你不想在图中包含这些级别。作为粗略的第一步,我会尝试保存新数据框(如您所愿),但另外运行以下命令:

tmp$Treatment = as.factor(as.character(tmp$Treatment))

这应该将Treatment变量保存为只有一个级别的因子。我的猜测是xyplot函数在绘制时会查找该因子的级别。作为相关示例,请考虑以下事项:

data(iris)

iris.2 = iris[iris$Species == "setosa",]
table(iris.2$Species)

iris.2$Species = factor(as.character(iris.2$Species))
table(iris.2$Species)

这里,两个表的报告方式不同,因为我们已将Species变量重新保存为新因子。希望这会有所帮助 -

答案 1 :(得分:0)

auto.key从因子变量的级别获取其值。当您对因子变量进行子集化时,将维护所有级别(因此将来,您可以知道特定子集中缺少哪些级别)。如果要删除子集中未使用的级别,可以使用

tmp <- droplevels(dat[dat$Treatment=="Control",])

这样auto.key永远不会看到其他因素水平。