簡體   English   中英

是否可以編寫一個 function 將使用 ggplot 生成多個圖形?

[英]Is it possible to write a function that will generate multiple graphs using ggplot?

我正在嘗試編寫一個 function ,它將使用 ggplot 生成多個直方圖(一個因子的每個級別一個)。

對於我正在使用的數據集,我使用facet_wrap創建了一個圖矩陣,但我的因子有 15 個級別,並且每個級別的計數對於每個 bin 差異很大,因此直方圖矩陣不是很有用,因為我被迫以相同的比例查看每個直方圖(例如,一個級別的最大計數約為 4,000,而另一個級別的最大計數約為 100)。

以下是我嘗試使用iris數據集作為示例來完成的工作。

data(iris)
library(tidyverse)

histo_func = function(df){
  species_list = unique(df$Species) #create a vector of levels for Species
  for (i in seq_along(species_list)) {
    species_plot = ggplot(subset(df, df$Species==species_list[i]),
              aes(Sepal.Length)) +
              geom_histogram()
  }
}

species_hist = histo_func(df = iris)

 species_hist
NULL

運行 function 后,我調用species_hist並得到 NULL。

function 本身可以工作 - 如果我逐步使用debugonce()i可以調用species_plot並獲取循環在該點循環通過的直方圖。

我想要的(如果可能的話)是將直方圖存儲在species_hist中,並能夠在調用species_hist時連續 output 所有直方圖。

提前感謝您的任何意見。

您的代碼存在問題,每次循環迭代都會覆蓋“species_plot”。 您將需要使用上述注釋中提到的打印語句或將 object 存儲在列表中。
此外,您沒有明確定義要從 function 返回的變量。

histo_func = function(df){
  species_plot=list()
  species_list = unique(df$Species) #create a vector of levels for Species
  for (i in seq_along(species_list)) {
    species_plot[[i]] = ggplot(subset(df, df$Species==species_list[i]),
                          aes(Sepal.Length)) +
      geom_histogram()
  }
  names(species_plot) = species_list
  species_plot
}

species_hist = histo_func(df = iris)

species_hist

上述代碼將每個 plot 作為 object 存儲在一個列表中,然后用物種名稱命名列表元素,然后將整個結構返回給調用變量。

暫無
暫無

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

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