簡體   English   中英

ggplot2 facet_wrap() 4 散點圖

[英]ggplot2 facet_wrap() 4 scatter plot

我有一個數據集(來自 R):

 head(anscombe)
  x1 x2 x3 x4   y1   y2    y3   y4
1 10 10 10  8 8.04 9.14  7.46 6.58
2  8  8  8  8 6.95 8.14  6.77 5.76

現在我想使用ggplot2在網格中繪制(x1,y1)(x2,y2)(x3,y3 ) 和(x4, y4) ggplot2 每個子圖還應分別具有標題“1”、“2”、“3”、“4”。 它應該與我們使用par(mfrow=c(2,2))時類似,我查看了facet_wrap文檔,但示例似乎沒有涵蓋這個簡單的情況。 我怎樣才能在 ggplot2 中實現它?

如果可以接受對數據集編號 1-4 進行硬編碼,這是一種方法:

library(dplyr)
library(ggplot2)
data(anscombe)

list(
  transmute(anscombe, x=x1, y=y1, dataset=1),
  transmute(anscombe, x=x2, y=y2, dataset=2),
  transmute(anscombe, x=x3, y=y3, dataset=3),
  transmute(anscombe, x=x4, y=y4, dataset=4)
) %>%
bind_rows() %>%
ggplot(aes(x, y)) +
geom_point() +
facet_wrap(~ dataset)

最重要的是,您需要一個變量中的所有 x 坐標值(x1 到 x4),以及另一個變量中的所有 y 坐標值(y1 到 y4)。

陰謀

您也可以嘗試不使用facet_wrap

library(ggplot2)
library(gridExtra)
grid.arrange(ggplot(df, aes(x1, y1))+geom_point(size=2),
             ggplot(df, aes(x2, y2))+geom_point(size=2),
             ggplot(df, aes(x3, y3))+geom_point(size=2),
             ggplot(df, aes(x4, y4))+geom_point(size=2))

在此處輸入圖片說明

可能並非所有這些都是必需的,但它對我有用。 要查看它在做什么,只需逐行迭代並查看中間步驟。

library(dplyr)
library(tidyr)
library(ggplot2)
mutate(df, i = row_number()) %>%
  gather(key, val, -i) %>%
  mutate(pane = gsub("[a-z]", "", key),
         key = gsub("[^a-z]", "", key)) %>%
  spread(key, val) %>%
  ggplot(aes(x=x,y=y)) +
    geom_point() +
    facet_wrap(~pane)

在此處輸入圖片說明

暫無
暫無

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

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