2017-07-13 29 views
0

我正在嘗試創建一個函數,我給出列名稱,它將生成一個圖並保存圖,但不確定正確的語法。我的想法:用於在數據框中繪製並保存列的函數

graph_it <- function (col_name) { 
    graph_name <- paste(col_name,'.png', sep='') 

ggplot(data = CPI, aes(y = col_name, x = DATE)) + geom_line() + 
theme_bw() + 
theme(panel.border = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     panel.background = element_blank()) + 
ggtitle("YOY") + 
scale_y_continuous(labels = scales::percent) 

ggsave(graph_name, width = 5, height = 5) 
} 

y = col_name不起作用。我如何在這個函數中傳遞列名作爲變量?

回答

0

你需要改變的主要事情是切換y = col_namey = CPI[, col_name]

graph_it <- function (col_name) { 
    graph_name <- paste(col_name,'.png', sep='') 

    ggplot(data = CPI, aes(y = CPI[, col_name], x = DATE)) + geom_line() + 
    theme_bw() + 
    theme(panel.border = element_blank(), 
      panel.grid.major = element_blank(), 
      panel.grid.minor = element_blank(), 
      panel.background = element_blank()) + 
    ggtitle("YOY") + 
    scale_y_continuous(labels = scales::percent) 

    ggsave(graph_name, width = 5, height = 5) 
} 


# Just for testing 
CPI <- mtcars 
CPI$DATE <- seq(as.Date("2000/1/1"), by = "month", length.out = 32) 

graph_it("mpg") 
1

看起來你是路過的列名作爲字符串。如果您想使用使用字符串的映射,請使用aes_string()。例如

graph_it <- function (col_name) { 
    graph_name <- paste0(col_name, '.png') 

    ggplot(data = CPI, aes(x = DATE)) + 
    geom_line(aes_string(y = col_name)) + 
    ggtitle("YOY") 

    ggsave(graph_name, width = 5, height = 5) 
}