gpt4 book ai didi

r - 在 ggplot 中从右到左对面板进行排序

转载 作者:行者123 更新时间:2023-12-01 23:53:58 25 4
gpt4 key购买 nike

我有一个包含 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 轴的空白图来创建空白区域。

需要手动调整 widths 参数,以使空白图占据适量的空间,以便其他两个图与上面的图垂直对齐。

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)

enter image description here

关于r - 在 ggplot 中从右到左对面板进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48090645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com