2017-05-20 35 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"))