当我在重新排序因子之前使用线路连接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"))
重新排序因素的水平运行良好,值应该到达应有的位置,但不知何故,线路连接的顺序保持不变。我不会想到如何改变我的重新排序以使其有效。
编辑:我应该补充说,该解决方案应具有足够的通用性,可以从包xyplot
同时适用于xYplot
和Hmisc
。
答案 0 :(得分: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
参数已更改。
答案 1 :(得分: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)))
答案 2 :(得分: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)))