我想制作一个 2x4 的图表数组,显示分布随时间的变化。默认ggplot
排列facet_wrap
是第一行有系列 1&2,第二行有系列 3&4,依此类推。我想改变这一点,使第一列按顺序排列 (1->2->3->4) 和然后第二列有接下来的 4 个系列。这样,您的眼睛可以垂直比较立即相邻的时间分布(我认为它们应该如此)。
问问题
2442 次
2 回答
9
使用方向dir
参数来facet_wrap()
。默认是水平的,这可以切换到垂直:
# Horizontally
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2)
# Vertically
ggplot(mtcars, aes(x=hp, y=mpg)) + geom_point() + facet_wrap(~ cyl, ncol=2, dir="v")
于 2016-05-18T14:46:26.920 回答
3
看起来您需要在 facet_wrap 调用之前使用排序因子执行此操作:
fac <- factor( fac, levels=as.character(c(1, 10, 2, 20, 3, 30, 4, 40) ) )
as/table in 的默认facet_wrap
值为 TRUE,它将把最小值(在本例中为“1”)放在左上角,将最大值(在上面的示例中为“40”)放在右下角。所以:
pl + facet_wrap(~fac, ncol=2, nrow=4)
您的评论表明您正在使用数字类变量。(你的评论仍然没有提供一个有效的例子,你似乎认为这是我们的责任,而不是你的责任。从哪里获得这样的权利概念?)这应该创建一个可能是“列专业”的因素,以数字或因素输入:
> ss <- 1:8; factor(ss, levels=ss[matrix(ss, ncol=2, byrow=TRUE)])
[1] 1 2 3 4 5 6 7 8
Levels: 1 3 5 7 2 4 6 8
另一方面,我可以想到这可能是有效方法的情况:
> ss <- 1:8; factor(ss, levels=ss[matrix(ss, nrow=2, byrow=TRUE)])
[1] 1 2 3 4 5 6 7 8
Levels: 1 5 2 6 3 7 4 8
于 2013-02-23T00:03:59.543 回答