2014-12-17 2 views
2

Моя цель - написать функцию, которая создает графики с помощью ggplot2, а затем использовать функцию мультимножества (http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_%28ggplot2%29/) для объединения созданных функцией графиков с другими графиками. (Я знаю, как использовать грани в ggplot2, но это не то, что я хочу сделать здесь). Я обнаружил, что когда я пишу функцию для создания графиков, множитель больше не работает. Ниже приведен упрощенный пример с использованием набора данных mtcars.Множественная ошибка с графиками, созданными с использованием ggplot внутри функции

Использование ggplot регулярно хорошо работает с Multiplot:

p1<-ggplot((subset(mtcars, gear==4)), aes(x=mpg, y=hp)) +geom_point() + 
      ggtitle("4 gears") 
    p2<-ggplot((subset(mtcars, gear==3)), aes(x=mpg, y=hp)) +geom_point() + 
      ggtitle("3 gears") 
    multiplot(p1, p2, cols=2) 

Однако Multiplot не работает, если одни и те же участки образуются с помощью функции. Графики отображаются индивидуально, а не в матрице.

plot_fun <-function(data_frame, title) { 
     print((ggplot(data_frame, aes(x=mpg, y=hp)) + 
         geom_point() + 
         ggtitle(title))) } 

p3 <-plot_fun((subset(mtcars, gear==4)), "4 gears") 
p4 <-plot_fun((subset(mtcars, gear==3)), "3 gears") 
multiplot(p3, p4, cols=2) 

Ясно, что есть что-то, что я не понимаю о том, что моя функция выводит и/или ввод, требуемый мультиплексором. Что я делаю не так? Я ценю помощь.

+0

Избавиться от 'печати (...)' в функции. Вам нужно вернуть объект 'ggplot', чтобы перейти к' multipot (...) '. – jlhoward

ответ

3

Превращение моего комментария в ответ: multiplot(...) принимает в качестве аргументов ggplot объектов, но ваш plot_fun(...) не возвращает ggplot объектов. Избавьтесь от звонка до print(...).

plot_fun <-function(data_frame, title) { 
    ggplot(data_frame, aes(x=mpg, y=hp)) + 
      geom_point() + 
      ggtitle(title) } 

p3 <-plot_fun((subset(mtcars, gear==4)), "4 gears") 
p4 <-plot_fun((subset(mtcars, gear==3)), "3 gears") 
multiplot(p3, p4, cols=2) 

Смежные вопросы