你好,我是shiny编程的新手。我目前正在开发一个应用程序,用户可以上传数据,然后选择应该绘制哪些变量。在这里,我遇到了ggplot只返回空图的问题。这不仅适用于我的特定数据集,而且当我使用iris
数据集时,也会出现同样的错误。以下是我的应用程序文档:
library(shiny)
library(ggplot2)
library(tidyverse)
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Plot Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
selectInput(inputId = "x_input",
choices = "",
label = "Choose x-Axis",
multiple = FALSE,
selectize = TRUE),
selectInput(inputId = "y_input",
choices = "",
label = "Choose y-Axis",
multiple = FALSE,
selectize = TRUE)
),
# Show a plot of the generated distribution
mainPanel("Sample of Input Data",
tableOutput("table"),
"Plot of Input Data",
plotOutput("plot")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output, session) {
output$table = renderTable({
#req(combined_df)
return(head(iris))
})
observe({
updateSelectInput(
session,
"y_input",
choices=names(iris))
})
observe({
updateSelectInput(
session,
"x_input",
choices=names(iris))
})
output$plot = renderPlot({
iris %>%
plot()
# plot = iris %>%
# ggplot(aes(x = input$x_input, y = input$y_input))
# print(plot)
})
}
# Run the application
shinyApp(ui = ui, server = server)
关于我如何制定output$plot
命令,我得到了不同的错误/问题。
1.将base
R与plot()
配合使用:
output$plot = renderPlot({
iris %>%
plot(x = input$x_input, y = input$y_input)
})
其给出以下误差:
Warning: Error in plot.window: need finite 'xlim' values
173: plot.window
172: localWindow
171: plot.default
170: plot
169: %>%
168: renderPlot [dirrectory....]
166: func
126: drawPlot
112: <reactive:plotObj>
96: drawReactive
83: renderFunc
82: output$plot
1: shiny::runApp
2.如果我没有使用base
R指定x和y值,我会得到一个绘图输出:
output$plot = renderPlot({
iris %>%
plot()
})
参见Here。这也是不令人满意的,因为我只想要一个单一的xy图。
3.使用ggplot()
:
output$plot = renderPlot({
plot = iris %>%
ggplot(aes(x = input$x_input, y = input$y_input))
})
我得到了一个没有任何数据点的空图。如果我把ggplot()
函数 Package 在print()
或show()
语句中,或者根本没有,这将保持不变。
4.最后一个组合是数字3的变体,也使用ggplot()
:
output$plot = renderPlot({
plot = iris %>%
ggplot(aes(x = input$x_input, y = input$y_input))+
geom_point()
})
这将返回一个中间有一个点的otherwis空图(参见here)。
重要提示:不管是否使用tidyverse
封装/符号,这些误差保持相同。
在这一点上,我运行的想法如何解决这个看似简单的问题,所以任何帮助将是非常感谢。谢谢!
1条答案
按热度按时间qojgxg4l1#
两件事:
1.我们需要将
input$
Package 为.data[[]]
(或者 Package 为!! sym()
)。1.单独调用
ggplot
是不够的,我们还需要geom_point()