我有多個用資料集生成的圖表。在將結果傳遞給ggplot(). 我想訪問我ggplot()在后續 ggplot 圖層和方面傳遞的資料,以便我可以更好地控制生成的圖形,并在繪圖本身中包含資料的一些特征,例如觀察次數。
這是一個可重現的例子:
library(tidyverse)
cars <- mtcars
# Normal scatter plot
cars %>%
filter(
# Many complicated operations
) %>%
group_by(
# More complicated operations
across()
) %>%
summarise(
# Even more complicated operations
n = n()
) %>%
ggplot(aes(x = mpg, y = qsec))
geom_point()
# Join the dots but only if mpg < 20
geom_line(data = .data %>% filter(mpg < 20))
# Include the total number of observations in the graph
labs(caption = paste("N. obs =", NROW(.data)))
人們當然可以在將其傳遞給之前創建一個單獨的資料集ggplot,然后在整個程序中參考該資料集(如下例所示)。但是,這要麻煩得多,因為您需要為每個圖形保存(并在以后洗掉)資料集并為一個圖形運行兩個單獨的命令。
我想知道是否有可以做的事情更類似于第一個使用的例子.data(這顯然實際上不起作用)。
library(tidyverse)
cars <- mtcars
tmp <- cars %>%
filter(
# Many complicated operations
) %>%
group_by(
# More complicated operations
across()
) %>%
summarise(
# Even more complicated operations
n = n()
)
tmp %>%
ggplot(aes(x = mpg, y = qsec))
geom_point()
# Join the dots but only if mpg < 20
geom_line(data = tmp %>% filter(mpg < 20))
# Include the total number of observations in the graph
labs(caption = paste("N. obs =", NROW(tmp)))
謝謝你的幫助!
uj5u.com熱心網友回復:
在每個幫助頁面中,geom_它提供了一種標準方法:
將使用單個引數呼叫函式,即繪圖資料。回傳值必須是一個 data.frame,并將用作圖層資料。可以從公式創建函式(例如 ~ head(.x, 10))。
labs另一方面,您可以在管道中使用占位.符,但您必須 a).首先給出資料引數 b) 將整個內容用大括號括起來以識別后面的..
例如:
library(tidyverse)
cars <- mtcars
# Normal scatter plot
cars %>%
filter() %>%
group_by(across()) %>%
summarise(n = n()) %>%
{
ggplot(., aes(x = mpg, y = qsec))
geom_point()
geom_line(data = ~ filter(.x, mpg < 20))
labs(caption = paste("N. obs =", NROW(.)))
}

或者,如果您不喜歡purrr公式語法,那么華麗的新 R 匿名函式也可以使用:
geom_line(data = \(x) filter(x, mpg < 20))
不幸的是,該labs函式似乎沒有明確的方法來測驗資料是否在ggplot堆疊中無形地洗牌,因為總的來說,它通常可以在不觸及主要資料的情況下繼續其作業。這些是解決此問題的一些方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537324.html
標籤:r图表2
