如何使用facet_wrap从行主列顺序更改?

时间:2013-02-22 22:58:48

标签: r ggplot2

我想制作一个2x4的图表数组,显示随时间变化的分布。与ggplot的默认facet_wrap排列是第一行包含系列1和2,第二行包含系列3和4等。我想更改此内容,以便第一列包含系列顺序(1-> 2-> 3-> 4)然后第二列具有接下来的4个系列。通过这种方式,您的眼睛可以垂直地比较紧邻的分布(我认为应该是这样)。

2 个答案:

答案 0 :(得分:4)

看起来你需要在facet_wrap调用之前使用排序因子来执行此操作:

 fac <- factor( fac, levels=as.character(c(1, 10, 2, 20, 3, 30, 4, 40) ) )

facet_wrap中as / table的默认值为TRUE,它将在左上角和最高值(上例中的“40”)中放置最小值(本例中为“1”)在右下角。所以:

 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

答案 1 :(得分:2)

使用方向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")