[英]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)。
可能並非所有這些都是必需的,但它對我有用。 要查看它在做什么,只需逐行迭代並查看中間步驟。
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.