簡體   English   中英

ggplot將構面放置在兩行構面之間

[英]ggplot place facet between two rows of facets

我有9個地塊,每個地塊有3個時間序列,其中一個地塊僅包含一條曲線,這是參考地塊,我希望將其放置在包含其他8個地塊的兩行之間。 有一個簡單的方法嗎? 我使用facet_wrap(~density,nrow=2)但我得到一行5行,另一行4行。 我確定其他人有這個問題,是否有一種簡單的方法來組織此參考圖的位置,還是我必須創建兩個單獨的圖並將它們疊加? 否則,我可能不得不在所有其他圖中移動該參考圖,但是這似乎是多余的信息。

這是我目前的結果,但是如您所見,它的布局不是很好。 在此處輸入圖片說明

您要查找的圖形可以使用gridExtra包中的gridArrange生成。 這是一個使用dplyrstorms數據集的示例

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和2的值,我們可以控制圖形設備中兩個圖形的相對大小。

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) 
                        )

在此處輸入圖片說明

如果我正確理解了這個問題,則可以使用適當的構面變量重新格式化數據,以引入新的參考面板行

library(ggplot2)

d <- data.frame(x=rep(1:10, 8), y = rnorm(80), 
                f=gl(8,10, ordered = TRUE))
d$f1 <- factor(d$f <= 4, labels=c(1,3))
d$f2 <- as.numeric(d$f) %% 4

d2 <- data.frame(x=1:10, y=0, f1 = 2)

ggplot(d, aes(x,y)) + 
  geom_point(aes(colour=f)) + 
  geom_point(data=d2, colour="black") + 
  facet_grid(f1~f2)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM