【发布时间】:2020-01-02 16:44:46
【问题描述】:
我正在尝试修改闪亮教程系列中的stockVis app 以使用 ggplot 绘制数据。原始应用程序还具有 xts 数据以及每日开盘价、最高价、最低价、收盘价 (OHLC) 数据。我只是想绘制收盘价与日期。我在我的代码中收到以下错误,“警告:错误:data 必须是一个数据框,或者是由fortify() 强制执行的其他对象,而不是具有类 reactiveExpr/reactive 的 S3 对象”
编辑:Brian's 评论后,我在代码的 ggplot 部分编辑了我的调用,但现在我收到以下错误消息,“警告:subset.default 中的错误:缺少参数“subset”,没有默认”
这是我的代码
#Load libraries
library(shiny)
library(quantmod)
library(ggplot2)
#source helper files
#source("helpers.R")
# Define UI ----
ui <- fluidPage(
titlePanel("stockVis", "Test Window Title"),
sidebarLayout(
sidebarPanel(
helpText("Input a stock symbol.
Data will be collected from Yahoo Finance."),
textInput("symb","Symbol", "SPY"),
dateRangeInput("dates","Date Range", start="2017-01-01", end=Sys.Date()),
br(),
checkboxInput("log","Plot Y-axis on log scale", value = FALSE ),
checkboxInput("adjust", "Adjust for inflation", value = FALSE),
),
mainPanel(
"Main Panel",
plotOutput("plot")
)
)
)
# Define server logic ----
server <- function(input, output) {
dataInput <- reactive({
getSymbols(
Symbols= input$symb,
src="yahoo",
from = input$dates[1],
to = input$dates[2],
auto.assign = FALSE
)
})
badf <- reactive(data.frame(dataInput)) #change xts data to date frame
baclosedf <- reactive(subset(badf(), select=c(input$symb.Close))) #subset only closing value
output$plot <- renderPlot({
p1 <- ggplot(
data=baclosedf,
mapping=aes(x=index(baclosedf), y=baclosedf.Close))+geom_line()+geom_point()
print(p1)
})
}
# Run the app ----
shinyApp(ui = ui, server = server)
编辑1:
output$plot <- renderPlot({
p1 <- ggplot(
data=baclosedf(),
mapping=aes(x=index(baclosedf()), y=baclosedf.Close()))+geom_line()+geom_point()
print(p1)
})
【问题讨论】:
-
试试
fortify.zoo(dataInput()) -
感谢您的回复。抱歉,我不明白你想让我用代码的哪一部分来尝试......
-
我在您的
ui中收到错误消息。请更正错误以测试它 -
UI 应该没问题,我重新检查了粘贴的代码,但删除了下面的绘图部分并加载了 UI。 output$plot
-
反应是特殊的函数调用。在使用
foo<-reactive(...)定义它之后,您需要在以后的代码中使用foo()对其进行评估。所以在你的 ggplot 调用中,它应该是baclosedf()等,而不是裸名。