Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在ggplot中从右向左排列面板_R_Ggplot2_Facet - Fatal编程技术网

R 在ggplot中从右向左排列面板

R 在ggplot中从右向左排列面板,r,ggplot2,facet,R,Ggplot2,Facet,我有一个5组的数据框。 我想使用ggplot按组划分我的数据。我需要面板从右到左排序,而不是从左到右(默认) df这里有一个解决方案有些粗糙,因为它需要手动定位。我们创建一个绘图函数,然后绘制第一行图(第1行到第3行的代码< df>代码>和第二行图(第4行和第5行 df>代码>)。我们使用网格将它们放在一起。安排< /代码>,但是我们在第二行的左端只添加y轴的空白图,创建空白。 手动调整宽度< /代码>参数是必要的,以使空白图占用正确的空间量,以便其他两个图垂直地与上面的图垂直排列。 libra

我有一个5组的数据框。 我想使用ggplot按组划分我的数据。我需要面板从右到左排序,而不是从左到右(默认)


df这里有一个解决方案有些粗糙,因为它需要手动定位。我们创建一个绘图函数,然后绘制第一行图(第1行到第3行的代码< df>代码>和第二行图(第4行和第5行<代码> df>代码>)。我们使用<代码>网格将它们放在一起。安排< /代码>,但是我们在第二行的左端只添加y轴的空白图,创建空白。

手动调整<代码>宽度< /代码>参数是必要的,以使空白图占用正确的空间量,以便其他两个图垂直地与上面的图垂直排列。

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)

您希望在左下角有一个空的绘图面板,还是只有一个空格?我需要一个只有一个空格的绘图面板。与现在显示的完全一样,但从右到左。关于这个问题的方法,有一些答案。例如,。这里提出的解决方案似乎不适用于新版本的ggplot。因为有一个“dir”参数v或h值,tt应该是左右或左右的简单参数…添加df$group=因子(df$group,LEVES=rev(df$group)),如前所述(删除的注释)。因此,该组将以相反的方式显示。另外,是否可以对齐两条线的y轴?您的意思是要将y轴记号和标签从绘图的底部一行移到左侧,使其直接位于绘图的顶部一行的y轴记号和标签的下方?完全正确。这将完美地回答我的问题
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)