在 ggplot 中从右到左排列面板
Order the panels from right to left in ggplot
我有一个包含 5 个组的数据框。
我想使用 ggplot 按组对我的数据进行分面。我需要面板从右到左排序,而不是从左到右(默认)。
df <- data.frame(group=letters[1:5],
x=1:5,
y=1:5)
ggplot(df, aes(x,y)) +
geom_point(size=3) +
facet_wrap(~group)
默认情况下,面板是从左到右排列的,因此 'a' 组出现在图表的左上角。右下角的面板是空的(因为只有 5 个组)。我希望面板从右到左出现。也就是说,'a' 应该出现在右上角,而左下角的面板应该是空的。有什么想法吗?
注意:问题与面板的标签无关。它也与使用 factor() 重新排序组无关。
我查看了 facet_wrap() 帮助,但唯一的选择是处理标签的 'switch' 和 'strip.position' 参数。 'dir' 参数允许垂直或水平位置,这不是我要找的。
提前致谢
这里有一个有点hacky的解决方案,因为它需要手动定位。我们创建一个绘图函数,然后分别绘制第一行图(df
的第 1 到 3 行和第二行图(df
的第 4 行和第 5 行)。我们使用 grid.arrange
,但我们在第二行的左端添加了一个只有 y 轴的空白图,以创建空白 space。
必须手动调整 widths
参数才能使空白图占据恰到好处的 space 数量,以便其他两个图与上面的图垂直对齐。
library(gridExtra)
library(grid)
pf = function(data, xrng=range(df$x), yrng=range(df$y)) {
ggplot(data, aes(x,y)) +
geom_point(size=3) +
facet_wrap(~ factor(group, rev(group))) +
scale_y_continuous(limits=yrng) +
scale_x_continuous(limits=xrng)
}
grid.arrange(pf(df[1:3,]),
arrangeGrob(pf(data.frame(x=-10,y=-10, group="x")) +
theme(panel.border=element_blank(),
panel.background=element_blank(),
strip.background=element_rect(colour=NA, fill=NA),
strip.text=element_text(colour=NA),
axis.text.x=element_text(colour=NA),
axis.title.x=element_text(colour=NA),
axis.ticks.x=element_blank(),
axis.title.y=element_text(angle=90, vjust=0.5),
axis.text.y=element_text(angle=0),
axis.ticks.y=element_line()),
pf(df[4:5,]) + theme(axis.text.y=element_blank(),
axis.title.y=element_blank(),
axis.ticks.y=element_blank()) ,
widths=c(1.12,2)),
ncol=1)
我有一个包含 5 个组的数据框。 我想使用 ggplot 按组对我的数据进行分面。我需要面板从右到左排序,而不是从左到右(默认)。
df <- data.frame(group=letters[1:5],
x=1:5,
y=1:5)
ggplot(df, aes(x,y)) +
geom_point(size=3) +
facet_wrap(~group)
默认情况下,面板是从左到右排列的,因此 'a' 组出现在图表的左上角。右下角的面板是空的(因为只有 5 个组)。我希望面板从右到左出现。也就是说,'a' 应该出现在右上角,而左下角的面板应该是空的。有什么想法吗?
注意:问题与面板的标签无关。它也与使用 factor() 重新排序组无关。 我查看了 facet_wrap() 帮助,但唯一的选择是处理标签的 'switch' 和 'strip.position' 参数。 'dir' 参数允许垂直或水平位置,这不是我要找的。
提前致谢
这里有一个有点hacky的解决方案,因为它需要手动定位。我们创建一个绘图函数,然后分别绘制第一行图(df
的第 1 到 3 行和第二行图(df
的第 4 行和第 5 行)。我们使用 grid.arrange
,但我们在第二行的左端添加了一个只有 y 轴的空白图,以创建空白 space。
必须手动调整 widths
参数才能使空白图占据恰到好处的 space 数量,以便其他两个图与上面的图垂直对齐。
library(gridExtra)
library(grid)
pf = function(data, xrng=range(df$x), yrng=range(df$y)) {
ggplot(data, aes(x,y)) +
geom_point(size=3) +
facet_wrap(~ factor(group, rev(group))) +
scale_y_continuous(limits=yrng) +
scale_x_continuous(limits=xrng)
}
grid.arrange(pf(df[1:3,]),
arrangeGrob(pf(data.frame(x=-10,y=-10, group="x")) +
theme(panel.border=element_blank(),
panel.background=element_blank(),
strip.background=element_rect(colour=NA, fill=NA),
strip.text=element_text(colour=NA),
axis.text.x=element_text(colour=NA),
axis.title.x=element_text(colour=NA),
axis.ticks.x=element_blank(),
axis.title.y=element_text(angle=90, vjust=0.5),
axis.text.y=element_text(angle=0),
axis.ticks.y=element_line()),
pf(df[4:5,]) + theme(axis.text.y=element_blank(),
axis.title.y=element_blank(),
axis.ticks.y=element_blank()) ,
widths=c(1.12,2)),
ncol=1)