如何根据输入在 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
函数或(我的偏好)purrr
的map
函数之一。这将为您提供ggplot
s 的列表。我认为您应该能够为 Shiny 输入做类似的事情。
感谢 Pork Chop 的链接 - 我设法创建了一个单选按钮输入列表,所以这是一个很好的开始。我将尝试使该解决方案适应我的 ggplot 问题,并尝试 camille 的想法。我用的purr不多,我会研究一下。再次感谢你们!
【参考方案1】:
正如我所做的编辑中所述,this post 非常有帮助。在观察()中包装实际创建的图并为导入的样本数量创建反应元素至关重要。
Pork Chop 对this post 的引用解决了我的多个动态输入问题。
【讨论】:
以上是关于如何根据输入在 R 中显示可变数量的 ggplots?的主要内容,如果未能解决你的问题,请参考以下文章
(R) 如何在 ggplot2 中根据颜色、线型和点形状获取图例?