3

当我xyplot在重新排序因子之前使用线连接时,它给了我一个很好的数据点之间的顺序连接:

library(lattice)
fin <- read.csv("http://dl.dropbox.com/u/2505196/unc_vall.csv", header=T)
xyplot(acceptability ~ character | motion, data=fin, col=1, 
       aspect="xy", layout=c(6,1), type="o", scales = list(x = list(rot = 90)))

在此处输入图像描述

然后我重新排序因子,一切都搞砸了:

fin$character <- factor(fin$character, levels = c("battle","klank","manny",
                        "skelly","zombie","loman","himan"))

在此处输入图像描述

重新排序因素的水平工作正常,值去他们应该的地方,但不知何故线路连接的顺序保持不变。我没有想到如何更改重新排序以使其正常工作。

编辑:我应该补充一点,解决方案应该足够通用,可以同时适用xyplotxYplotpackage Hmisc

4

3 回答 3

3

我认为线条是按照它们在数据中出现的顺序绘制的。因此,如果您想获得正确的顺序,您可以这样做:

xyplot(acceptability ~ character | motion, data=fin[order(fin$character),], col=1, 
aspect="xy", layout=c(6,1), type="o", scales = list(x = list(rot = 90)))

请注意,只有data参数发生了变化。

于 2012-10-24T12:38:57.480 回答
2

设置type=c("a", "p")(代替type="o")可以解决问题:

xyplot(acceptability ~ character | motion, data=fin, col=1,
       aspect="xy", layout=c(6,1), type=c("a", "p"), 
       scales = list(x = list(rot = 90)))
于 2012-10-24T12:47:38.420 回答
2

我认为更好的解决方案是按原样处理数据而不是假数据——这里的 x 轴是一个因素,你应该尊重这一点。您可以实现您想要使用的功能,panel.average()但我们也需要panel.xyplot()在自定义panel函数中调用:

xyplot(acceptability ~ character | motion, data=fin, col=1, 
       aspect="xy", layout=c(6,1), scales = list(x = list(rot = 90)),
       panel = function(x, y, ...) {
           panel.xyplot(x, y, ...)
           panel.average(x, y, horizontal = FALSE, ...)
       })

完全感谢有一种更简单的方法,因为type = "a"快捷方式会panel.average()为我们添加呼叫,因此将情节更改为:

xyplot(acceptability ~ character | motion, data=fin, col=1, 
       aspect="xy", layout=c(6,1),
       type = c("p","a"), ## specify the type!
       scales = list(x = list(rot = 90)))
于 2012-10-24T12:52:12.543 回答