【问题标题】:How to use function(plotname, other input) to print different plots every use如何使用函数(绘图名称,其他输入)在每次使用时打印不同的绘图
【发布时间】:2016-07-22 22:03:03
【问题描述】:

我无法找到如何制作一个函数来制作一个绘图(使用 ggplot),然后使用我在函数中输入的名称保存该绘图,如下所示:

lcaplot <- function(name,lcmodel){
       abc <- ggplot(lcmodel,aes(x = L1, y = value, fill = Var2))
       abc <- abc + geom_bar(stat = "identity", position = "stack")
       abc <- abc + facet_grid(Var1 ~ .) 
       abc <- abc + scale_fill_brewer(type="seq", palette="Greens") +theme_bw()
       abc <- abc + labs(x = "Response Items",y="Probabilities", fill ="Answer categories")
       abc <- abc + theme( axis.text.y=element_blank(),
                  axis.ticks.y=element_blank(),                    
                  panel.grid.major.y=element_blank()) 

这部分很好,因为它制作了我想要的情节,但我无法使用预先指定的名称保存它:

 print(abc)
 ggsave(abc,filename=name,device="png",limitsize=TRUE)
 dev.off() 
 }

我尝试了多种方法,例如使用不同的函数(例如 png() )或更改顺序(首先 ggsave,然后打印)。

我收到以下错误消息:

Saving 6.2 x 3.71 in image.
Error in gsub("%%", "", s) : object 'name' not found.

这指的是 lcmodel(name,lcmodel) 中的输入。我也在这里尝试过不同的东西(例如函数 (xyz*,lcmodel)),但它不会运行。

这让我觉得我试图粘贴为名称的内容应该是: 1) 一个字符串 --> "name" 保存了一个名为 name.png 的图,这很好 - 但这意味着每次我运行代码时,我都会保存旧的...

或 2)一个对象。我试过添加类似的东西:

name <- name 

刚开始,但没有任何帮助。

将不胜感激任何其他制作多个情节的方法。我有 60 组不同的 lcmodel 数据,我希望能够: lcaplot(pic1, lcmodel1) lcaplot(pic2, lcmodel2)

等等

这甚至可能吗?感谢任何输入或指出愚蠢的错误!

你的, 连

【问题讨论】:

    标签: r function plot ggplot2 save


    【解决方案1】:

    您可以使用%+% 运算符来切换 ggplot 对象中的数据。如果你想让它成为一个函数,你可以这样做:

    library(ggplot2)
    df1 <- data.frame(xvar = 1:9, yvar = 1:9)
    df2 <- data.frame(xvar = 4:-4, yvar = 4:-4)
    
    plot_1 <- ggplot(df1)+
      aes(x = xvar, y = yvar)+
      geom_point()
    plot_1
    
    switch_data <- function(my_plot, new_data){
      output_plot <- my_plot %+% new_data
      return(output_plot)
    }
    
    plot_2 <- switch_data(plot_1, df2)
    

    【讨论】:

    • 我已经研究了一段时间,但我看不出这如何解决我打印多个图的问题(或者更具体地说;在函数中更改名称)。能详细点吗?
    • 哦,是的,我想我一定误解了你的目标。以为您正在尝试对不同的数据进行分类。我不确定你得到什么样的错误,但我的第一个建议是更改你的绘图对象的名称,因为plot 是 R 中一个非常广泛使用的函数,并且可能会混淆 ggsave功能。当您尝试您的代码时会发生什么?
    • 感谢您的努力!我已经编辑了我的问题,以适应您的 cmets。这不是对象名称,我使用了不同的名称。另外,我添加了错误消息。
    【解决方案2】:

    我想通了:Rob Wanders 再次挽救了局面。

    问题是我没有将字符串放入我的函数中。

    所以当你使用这段代码时,写:

     lcaplot("desiredplotname.png",data)
    

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      相关资源
      最近更新 更多