如何根据输入在 R 中显示可变数量的 ggplots?

Posted

技术标签:

【中文标题】如何根据输入在 R 中显示可变数量的 ggplots?【英文标题】:How do I display variable number of ggplots in R shiny, depending on input? 【发布时间】:2018-12-21 21:13:03 【问题描述】:

这是我在 *** 上的第一个问题。我已经尽量说清楚了,但我也非常愿意接受反馈!

我正在使用 R shiny 创建一个应用程序来分析多个样本的二维数据(时间和值)。

我希望申请:

    导入示例文件。

    识别上传文件中的样本数量。

    为每个样本创建一个 selectInput 栏。 为每个样本创建一个 ggplot 对象。

非常感谢 Pork Chop 指出了与 this question 的相似之处 - 这解决了我的多个 selectInput 栏问题。还要感谢 camille 建议 purr 的 map 功能,这有助于我轻松创建 ggplot 对象列表。

但是,我仍在努力让所有 ggplot 对象在 Shiny 中显示。我曾使用this approach 获得灵感,但作者使用了一个具有静态长度的 for 循环。我尝试了他们的方法,只是想看看它是否有效,但它也只给了我情节列表中的第一个情节。

这是我当前方法的一个非常基本的示例。也许与地图/ lapply与renderPlot的东西?即 map(plot_list, renderPlot()) ?

再次衷心感谢您的帮助和耐心。

编辑:终于在this 帖子的帮助下解决了我的问题!我没有使用 max_plots,而是为样本数量创建了一个反应值,并且一旦我添加了观察(),就能够使图正确显示。

【问题讨论】:

Dynamic number of input widgets in shiny的可能重复 我对 Shiny 不是很熟悉,但是由于 R 对向量进行操作,因此通常有比 for 循环更好的方法。对于绘图,我将使用split 按样本拆分数据,然后使用apply 函数或(我的偏好)purrrmap 函数之一。这将为您提供ggplots 的列表。我认为您应该能够为 Shiny 输入做类似的事情。 感谢 Pork Chop 的链接 - 我设法创建了一个单选按钮输入列表,所以这是一个很好的开始。我将尝试使该解决方案适应我的 ggplot 问题,并尝试 camille 的想法。我用的purr不多,我会研究一下。再次感谢你们! 【参考方案1】:

正如我所做的编辑中所述,this post 非常有帮助。在观察()中包装实际创建的图并为导入的样本数量创建反应元素至关重要。

Pork Chop 对this post 的引用解决了我的多个动态输入问题。

【讨论】:

以上是关于如何根据输入在 R 中显示可变数量的 ggplots?的主要内容,如果未能解决你的问题,请参考以下文章

如何在r中打印可变数量的参数?

ggplot2 配色

R:如何根据具有不同列名的数据组合ggplots

(R) 如何在 ggplot2 中根据颜色、线型和点形状获取图例?

ggplot2使用单独的日期和可变数据帧按日期绘制时间序列r

如何使ggplot2中的可变条宽不重叠或间隙