ggplot在两行方面之间放置一个方面

时间:2017-11-15 17:26:57

标签: r ggplot2

我有9个图,每个图中有3个时间序列,其中一个图只包含一条曲线,它是我想放在包含其他8个图的两行之间的参考图。有一个简单的方法吗? 我使用facet_wrap(~density,nrow=2)但我得到一行5和另一行4图。我相信其他人有这个问题,是否有一个简单的方法来组织这个参考图的位置,或者我是否必须创建两个单独的图并覆盖它们?否则我可能不得不在所有其他图中移动此参考图,但它似乎是多余的信息。

这是我目前的结果,但是你可以看到它的布局不是很好。 enter image description here

2 个答案:

答案 0 :(得分:1)

您正在寻找的图形可以使用gridArrange生成 gridExtra包。这是 使用来自的storms数据集的示例 dplyr

library(ggplot2)
library(gridExtra)
library(dplyr)
data(storms, package = 'dplyr')
str(storms)

## Classes 'tbl_df', 'tbl' and 'data.frame':    10010 obs. of  13 variables:
##  $ name       : chr  "Amy" "Amy" "Amy" "Amy" ...
##  $ year       : num  1975 1975 1975 1975 1975 ...
##  $ month      : num  6 6 6 6 6 6 6 6 6 6 ...
##  $ day        : int  27 27 27 27 28 28 28 28 29 29 ...
##  $ hour       : num  0 6 12 18 0 6 12 18 0 6 ...
##  $ lat        : num  27.5 28.5 29.5 30.5 31.5 32.4 33.3 34 34.4 34 ...
##  $ long       : num  -79 -79 -79 -79 -78.8 -78.7 -78 -77 -75.8 -74.8 ...
##  $ status     : chr  "tropical depression" "tropical depression" "tropical depression" "tropical depression" ...
##  $ category   : Ord.factor w/ 7 levels "-1"<"0"<"1"<"2"<..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ wind       : int  25 25 25 25 25 25 25 30 35 40 ...
##  $ pressure   : int  1013 1013 1013 1013 1012 1012 1011 1006 1004 1002 ...
##  $ ts_diameter: num  NA NA NA NA NA NA NA NA NA NA ...
##  $ hu_diameter: num  NA NA NA NA NA NA NA NA NA NA ...

让我们创建两个图形。第一张图片将只显示category == -1 风暴(这将是你问题中的对照组)。第二 图形将成为category > -1风暴

的图形图形

首先,我们将为图形构建一个通用的ggplot对象。

graphic <-
  ggplot() + 
  aes(x = long, y = lat, color = category) +
  geom_point() +
  facet_wrap( ~ category) +
  scale_color_hue(breaks = levels(storms$category),
                  labels = levels(storms$category),
                  drop = FALSE)

接下来,我们根据需要构建两个图形。

g1 <- graphic %+% dplyr::filter(storms, category == -1) + theme(legend.position = "none")
g2 <- graphic %+% dplyr::filter(storms, category != -1)

gridExtra::grid.arrange可以采用数字1和2的布局矩阵 表示传递给函数的第一个和第二个图形。 (这适用于 顺便说一句,不仅仅是两个图形。)重复1的值 在矩阵中我们可以控制两个图形的相对大小 图形设备。

gridExtra::grid.arrange(g1, g2,
                        layout_matrix = 
                          matrix(c(1, 1, 1, 2, 2, 2, 2, 2,
                                   1, 1, 1, 2, 2, 2, 2, 2,
                                   1, 1, 1, 2, 2, 2, 2, 2),
                                 byrow = TRUE, nrow = 3) 
                        )

enter image description here

答案 1 :(得分:0)

如果我正确理解了这个问题,您可以使用适当的构面变量重新格式化数据,以引入一排新的参考面板

$ postgres --single -D /full/path/to/datadir postgres
PostgreSQL stand-alone backend 9.5.7
backend>

enter image description here