簡體   English   中英

編寫一個返回ggplot2圖形向量的函數

[英]Write a function that returns a vector of ggplot2 graphs

我有這個項目,我想為各種不同的數據框制作相同的圖。 我想我可以通過編寫一個將數據框作為輸入然后返回圖形矢量的函數來做到這一點 - 就像這樣:

df <- data.frame(x = runif(100), y = runif(100))
plot.list <- function(df){
  g1 <- qplot(x, y, data = df)
  g2 <- qplot(x, x + y, data = df)
  c(g1, g2) 
}

我想這樣做:

print(plot.list(df)[1])

獲得與我完成相同的結果:

print(qplot(x,y, data = df))

正如您所看到的,這不起作用 - 它似乎打印出情節所基於的數據框(?)。 我的猜測是,我誤解了關於對象在R中的工作原理或者ggplot2圖的性質。 感謝您的任何建議(或者建議我采取更好的方法來做我想做的事情)。

有幾種方法可以解決這類問題,但是你可能不知道的一個技巧是ggplot2有一個特殊的運算符用於這種目的,即使用不同的數據框創建相同的圖形:

d1 <- data.frame(x=1:10,y=rnorm(10))
d2 <- data.frame(x=20:29,y=runif(10))
p <- ggplot(data = d1, aes(x = x, y = y)) + geom_point()
print(p)
print(p %+% d2)

因此%+%運算符會將數據幀d2插入由p定義的繪圖結構中。 這樣,您可以創建一次繪圖,然后將其應用於不同的數據框。

為了更直接地解決你在你的問題概括使用,一旦你創建的第一個情節, p ,您可以lapply沿着數據幀列表這個情節結構:

d3 <- data.frame(x = 1:10, y = rexp(10))
rs <- lapply(list(d1,d2,d3),FUN = function(x,p){p %+% x},p=p)

然后你有三個圖存儲在rs

將對象存儲在list而不是向量中:

plot.list <- function(df){
  g1 <- qplot(x, y, data = df)
  g2 <- qplot(x, x + y, data = df)
  list(g1, g2) 
}

這是從共享相同列名的不同數據幀生成多個圖的另一種方法。

d1 = data.frame(x = 1:10,  y = rexp(10))
d2 = data.frame(x = 5:20,  y = rnorm(16))
d3 = data.frame(x = 21:30, y = rpois(10, 4))

plots = llply(list(d1, d2, d3), `%+%`, p = qplot(x, y))

暫無
暫無

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

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