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