2017-05-20 113 views
1

我是新至R很抱歉,如果這個問題是愚蠢的,但我看了看周圍,並不能找到答案:保存ggplot對象

我有25家銀行貸款上數據的面板數據爲期24個月。我在這裏做一個簡單的版本與3家銀行和3個時期:

bank<-c("bank1", "bank1", "bank1", "bank2", "bank2", "bank2", "bank3", "bank3", "bank3") 

date<-c("jan-2016", "feb-2016", "Mar-2016", "jan-2016", "feb-2016","Mar-2016", "jan-2016", "feb-2016", "Mar-2016") 

tot_loans<-c(200000, 100000, 200000, 155000, 233000, 435000, 99000, 111000, 129000) 

df<-data.frame(bank, date, tot_loans) 

我想創建一個循環,每個銀行節省ggplot對象。我的目標是稍後在降價文件中使用這些對象。我試試這個:

bank_list <- unique(df$bank) 

for (i in seq_along(bank_list)) { 
    paste(i, "total_loans", sep="_") <- df %>% 
    group_by(date) %>% 
    filter(bank==[[i]]) %>% 
    ggplot(aes(x=date, y=loan_size)) + 
      geom_line() + 
      ggtitle(paste([[i]], "value of loans", sep=" ")) 
    } 

但這裏有多個錯誤。我想得到的是一系列名爲「bank1_total_loans」,「bank2_total_loans」等的ggplot對象,並且它們中的每一個都有銀行名稱作爲ggplot標題。 有沒有辦法做到這一點?

回答

0
library(tidyverse) 
library(ggplot2) 
bank<-c("bank1", "bank1", "bank1", "bank2", "bank2", "bank2", "bank3", "bank3", "bank3") 

date<-c("jan-2016", "feb-2016", "Mar-2016", "jan-2016", "feb-2016","Mar-2016", "jan-2016", "feb-2016", "Mar-2016") 

tot_loans<-c(200000, 100000, 200000, 155000, 233000, 435000, 99000, 111000, 129000) 

df<-data.frame(bank, date, tot_loans) 


plot_list <- df %>% 
    split(.[["bank"]]) %>% 
    map(~ggplot(data = ., aes(x=date, y=tot_loans)) + 
     geom_line() + 
     ggtitle(paste(.[1,1], "value of loans", sep=" ")) 
    ) 

您可以避免使用map函數進行循環。

+0

只是一個提示:如果您想了解'map'職能工作的家庭怎麼樣,看的過程中*預研編程*在Coursera .ORG。 –

+0

非常感謝!這些工作完美 – Gianzen

0
library(ggplot2) 

library(dplyr)

library(zoo) 

轉化日期變量成日期類進行適當的可視化。

df$date <- as.yearmon(as.character(df$date), "%b-%Y") 
df$date <- as.Date(df$date) 

ggplot_creater <- function(data, selector){ 
    m <- data %>% filter(bank %in% selector) %>% 
    ggplot(aes(x=date, y=tot_loans, group=bank)) + 
    theme_bw(base_size=14)+ 
    geom_line() + 
    labs(x="Date", y="Total of Loans", 
     title="Value of loans")+ 
    facet_wrap(~bank) 
} 

讓我們來看看它如何工作的:

bank1_total_loans <- ggplot_creater(df, "bank1") 
bank1and3_total_loans <- ggplot_creater(df,c("bank1", "bank3"))