7

我想制作一个 2x4 的图表数组,显示分布随时间的变化。默认ggplot排列facet_wrap是第一行有系列 1&2,第二行有系列 3&4,依此类推。我想改变这一点,使第一列按顺序排列 (1->2->3->4) 和然后第二列有接下来的 4 个系列。这样,您的眼睛可以垂直比较立即相邻的时间分布(我认为它们应该如此)。

4

2 回答 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 回答