[英]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.