在闪亮的应用程序中使用 ggvis 创建散点图
Creating a scatter plot using ggvis in a shiny app
我正在尝试创建一个执行以下操作的简单应用程序:
- 将 csv 文件导入为反应式(这必须是反应式)
- 在一个 tabPanel
中将 csv 的内容打印为数据 table
- 在另一个 tabPanel 中使用 ggvis 创建交互式散点图
但是我无法创建绘图 - 应该显示绘图的 tabPanel 是空白的。控制台中没有任何错误或警告消息。不确定代码有什么问题。
代码如下:
# Define UI for application
ui <- fluidPage(
# Application title
titlePanel("App"),
sidebarLayout(
sidebarPanel(
fileInput(inputId = "inputCrossTab"
, label = "Select the input sheet"
, multiple = FALSE
, accept = c('.csv')
)
),
# Show a table and plot
mainPanel(
tabsetPanel(id = "tabset"
, type = 'pills'
, tabPanel(title = "Table"
, DT::dataTableOutput('table')
)
, tabPanel(title = "Charts"
,ggvisOutput("plot")
)
)
)
)
)
# Define server logic required
server <- function(input, output) {
# Import csv data as a reactive
dat <- reactive({
req(input$inputCrossTab$datapath)
dat_tab <- data.table::fread( file = input$inputCrossTab$datapath
, header = TRUE)
})
# Render imported data as table
output$table <- DT::renderDataTable({
dat()
})
# Plot the table as a scatter plot
plot <- reactive({
dat()%>%
ggvis::ggvis(~Total.x,~Total.y)%>%
layer_points(fill:="red")%>%
bind_shiny("plot")
})
}
# Run the application
shinyApp(ui = ui, server = server)
这是我正在导入的 csv 文件(它只是一个有 5 行 3 列的文件...一些随机组成的数据)..
X1,Total.x,Total.y
ncksncnxzc,0.8338719625,0.0163952762
xsmkslaxmkaslx,0.5867098735,0.2033673932
njasdnsa,0.3586965341,0.8281010715
sadlasdl;,0.060212096,0.1735624054
nsakksad,0.7281606887,0.3851430044
还有一件事,为了可重现的示例,我在这里导入了一个 csv。在我的实际代码中,我正在导入一个 csv 文件并进行一些转换并创建一个反应数据 table 就像给定的 csv 数据一样。
请帮我解决这个问题。
谢谢,
阿诺普
您的服务器代码中只有一个很小的错误。分配反应式时,您必须添加“output$plot”而不仅仅是“plot”。
这是更正后的代码。
library(ggvis)
ui <- fluidPage(
# Application title
titlePanel("App"),
sidebarLayout(
sidebarPanel(
fileInput(inputId = "inputCrossTab"
, label = "Select the input sheet"
, multiple = FALSE
, accept = c('.csv')
)
),
# Show a table and plot
mainPanel(
tabsetPanel(id = "tabset"
, type = 'pills'
, tabPanel(title = "Table"
, DT::dataTableOutput('table')
)
, tabPanel(title = "Charts"
,ggvisOutput("plot")
)
)
)
)
)
# Define server logic required
server <- function(input, output) {
# Import csv data as a reactive
dat <- reactive({
req(input$inputCrossTab$datapath)
dat_tab <- data.table::fread( file = input$inputCrossTab$datapath
, header = TRUE)
})
# Render imported data as table
output$table <- DT::renderDataTable({
dat()
})
# Plot the table as a scatter plot
output$plot <- reactive({
dat()%>%
ggvis::ggvis(~Total.x,~Total.y)%>%
layer_points(fill:="red")%>%
bind_shiny("plot")
})
}
# Run the application
shinyApp(ui = ui, server = server)```
我正在尝试创建一个执行以下操作的简单应用程序:
- 将 csv 文件导入为反应式(这必须是反应式)
- 在一个 tabPanel 中将 csv 的内容打印为数据 table
- 在另一个 tabPanel 中使用 ggvis 创建交互式散点图
但是我无法创建绘图 - 应该显示绘图的 tabPanel 是空白的。控制台中没有任何错误或警告消息。不确定代码有什么问题。
代码如下:
# Define UI for application
ui <- fluidPage(
# Application title
titlePanel("App"),
sidebarLayout(
sidebarPanel(
fileInput(inputId = "inputCrossTab"
, label = "Select the input sheet"
, multiple = FALSE
, accept = c('.csv')
)
),
# Show a table and plot
mainPanel(
tabsetPanel(id = "tabset"
, type = 'pills'
, tabPanel(title = "Table"
, DT::dataTableOutput('table')
)
, tabPanel(title = "Charts"
,ggvisOutput("plot")
)
)
)
)
)
# Define server logic required
server <- function(input, output) {
# Import csv data as a reactive
dat <- reactive({
req(input$inputCrossTab$datapath)
dat_tab <- data.table::fread( file = input$inputCrossTab$datapath
, header = TRUE)
})
# Render imported data as table
output$table <- DT::renderDataTable({
dat()
})
# Plot the table as a scatter plot
plot <- reactive({
dat()%>%
ggvis::ggvis(~Total.x,~Total.y)%>%
layer_points(fill:="red")%>%
bind_shiny("plot")
})
}
# Run the application
shinyApp(ui = ui, server = server)
这是我正在导入的 csv 文件(它只是一个有 5 行 3 列的文件...一些随机组成的数据)..
X1,Total.x,Total.y
ncksncnxzc,0.8338719625,0.0163952762
xsmkslaxmkaslx,0.5867098735,0.2033673932
njasdnsa,0.3586965341,0.8281010715
sadlasdl;,0.060212096,0.1735624054
nsakksad,0.7281606887,0.3851430044
还有一件事,为了可重现的示例,我在这里导入了一个 csv。在我的实际代码中,我正在导入一个 csv 文件并进行一些转换并创建一个反应数据 table 就像给定的 csv 数据一样。
请帮我解决这个问题。
谢谢, 阿诺普
您的服务器代码中只有一个很小的错误。分配反应式时,您必须添加“output$plot”而不仅仅是“plot”。 这是更正后的代码。
library(ggvis)
ui <- fluidPage(
# Application title
titlePanel("App"),
sidebarLayout(
sidebarPanel(
fileInput(inputId = "inputCrossTab"
, label = "Select the input sheet"
, multiple = FALSE
, accept = c('.csv')
)
),
# Show a table and plot
mainPanel(
tabsetPanel(id = "tabset"
, type = 'pills'
, tabPanel(title = "Table"
, DT::dataTableOutput('table')
)
, tabPanel(title = "Charts"
,ggvisOutput("plot")
)
)
)
)
)
# Define server logic required
server <- function(input, output) {
# Import csv data as a reactive
dat <- reactive({
req(input$inputCrossTab$datapath)
dat_tab <- data.table::fread( file = input$inputCrossTab$datapath
, header = TRUE)
})
# Render imported data as table
output$table <- DT::renderDataTable({
dat()
})
# Plot the table as a scatter plot
output$plot <- reactive({
dat()%>%
ggvis::ggvis(~Total.x,~Total.y)%>%
layer_points(fill:="red")%>%
bind_shiny("plot")
})
}
# Run the application
shinyApp(ui = ui, server = server)```