我在闪亮的应用程序中的ggplot将不会显示数据表中的值,只显示一个点

问题描述 投票:0回答:3

好吧我确定这是一个我已经错过的一些显而易见的事情,但我是R的新手并且创造了闪亮的应用程序,但我正在尝试自己教他们两个。

我有一个RNA值的数据表(来自约150个捐赠者的> 20,000个基因),我正在尝试创建一个简单的闪亮应用程序从列表中获取2个基因,并显示来自所有150个捐赠者的表达值的散点图彼此。后来我想对数据做更多的事情,但我很难让这个简单的位先运行!

下面的代码是我的应用程序的当前简单状态。它仍然非常简单,但结果图只显示每个基因的单个点,代码下方的图像。当我想要显示的是表格中相对值的散点图

数据集的截断版本(仍然产生相同的错误)也在下面,以及str()结果。

library(shiny)
library(ggplot2)
GeneNames <- colnames(Short_cortex5)
ui <- fluidPage(
   sidebarLayout(
      sidebarPanel(
         selectizeInput(inputId = "gene_X",
                     label = "Select gene X:",
                     choices = GeneNames),

         selectizeInput(inputId = "gene_Y",
                        label = "Select gene Y:",
                        choices = GeneNames)
      ),

      mainPanel(
         plotOutput(outputId = "corrPlot")
      )
   )
)

server <- function(input, output) {

  output$corrPlot <- renderPlot({
    ggplot(data = Short_cortex5, aes(x=input$gene_X, y=input$gene_Y)) +
      geom_point()
   })
}

shinyApp(ui = ui, server = server)

enter image description here

> str(Short_cortex5)
'data.frame':   8 obs. of  8 variables:
 $ MARC2 : num  15.3 16.1 17.3 11.4 21.8 ...
 $ MARCH1: num  2.5 4.7 2.46 3.11 6.12 ...
 $ SEPT1 : num  1.068 0.298 0.381 0.555 0.756 ...
 $ DEC1  : num  0.0261 0 0 0.0226 0 ...
 $ MARCH2: num  81.2 68.9 63.4 84.5 88.5 ...
 $ SEPT2 : num  66.1 89 65.2 49 106.2 ...
 $ MARCH3: num  1.756 1.348 1.25 0.451 2.137 ...
 $ SEPT3 : num  103 208 190 202 223 ...
> Short_cortex5
  MARC2 MARCH1  SEPT1    DEC1 MARCH2  SEPT2 MARCH3 SEPT3
1 15.30  2.501 1.0680 0.02610  81.15  66.14 1.7560 103.3
2 16.07  4.700 0.2980 0.00000  68.90  88.95 1.3480 207.7
3 17.27  2.462 0.3812 0.00000  63.41  65.20 1.2500 190.5
4 11.37  3.107 0.5550 0.02261  84.53  48.98 0.4507 201.9
5 21.76  6.123 0.7558 0.00000  88.49 106.20 2.1370 223.0
6 15.55  4.239 0.5859 0.03581  58.91  69.80 0.5515 214.1
7 16.74  4.596 0.6551 0.02627  70.38  68.50 0.8489 224.4
8 11.48  2.167 0.3567 0.01090  60.14  74.04 1.1210 164.9
r shiny
3个回答
2
投票

嗨,你需要在你的ggplot调用中从标准aes更改为aes_string

server <- function(input, output) {

  output$corrPlot <- renderPlot({
    ggplot(data = Short_cortex5, aes_string(x=input$gene_X, y=input$gene_Y)) +
      geom_point()
   })
}

这是因为输入的值是字符向量

希望这可以帮助!!


3
投票

你所有的应用程序目前正在做的是将基因NAME相互映射,因此你只得到一分。

您想告诉R使用与该名称对应的变量并绘制该变量。最简单的方法是使用Non-standard evaluation如下:

require(rlang)

output$corrPlot <- renderPlot({
    ggplot(data = Short_cortex5, aes(x=!!sym(input$gene_X), y=!!sym(input$gene_Y))) +
      geom_point()
  })

编辑:

根据其他回复,这可能不是我声称的最简单方法!

我认为值得注意的是release notesggplot2 V3.0.0

aes()现在支持quasiquotation,以便您可以使用!!,!!!和:=。这取代了现在软弃用的aes_()和aes_string()(但会保留很长时间)。


1
投票

你可以使用它非常通用的get而不是ggplot特有的,可以用于你可能有的其他图表和表格

  output$corrPlot <- renderPlot({
    ggplot(data = mtcars, aes(x=get(input$gene_X), y=get(input$gene_Y))) +
      geom_point()
  })
© www.soinside.com 2019 - 2024. All rights reserved.