많은 검색과 조사를 거쳐이 작업을 수행하는 방법을 알지 못했습니다. 기본적으로 ggplot_build를 사용하여 플롯에서 생성 된 데이터에 액세스합니다. 그러나 플롯은 renderPlot을 통해 Shiny에서 생성되므로 앱의 다른 곳에서 액세스 할 수 없습니다.Shiny R의 renderPlot에서 ggplot_build에 액세스해야합니다.
그래서 가장 가까운 점은 빈 reactiveValue를 선언하고 매번 내 전체 플로팅 기능을 추가하는 것입니다. 이렇게하면 ggplot_build에서 데이터를 가져 오기 위해 필 요할 때 플롯 객체에 접근 할 수 있습니다.
문제는 아무런 오류도 발생시키지 않지만 내 코드를 실행할 때 플롯이 생성되지 않는다는 것입니다. 코드 자체는 아래에 있으며, 플로팅 자체의 매우 단순한 예입니다. 정식 버전에는 추가 된 geom_ terms 등의 상당한 양이 포함됩니다. 모든 도움이 크게 감사 할 것입니다. 미리 감사드립니다.
는 지금까지 내 데이터와 같은, 그것은 CSV에서의이 같은 같습니다
Year,Field,Company,Hybrid,Yield,Moisture,Erect,DoP,DoH,RM,Stand,PPA
1934,Alhambra,Champion,White Pearl,9.1,39.5,NaN,2-May,20-Nov,NaN,NaN,NaN
1944,Galesburg,Pioneer,334,92.7,18.3,99.3,20-May,8-Nov,NaN,NaN,NaN
1945,Sheldon,Funk,G-169,70.6,24.3,39,25-May,8-Nov,NaN,NaN,NaN
1946,Galesburg,Doubet,D-42,100.8,22,94,24-May,8-Nov,NaN,NaN,NaN
1949,DeKalb,Ferris,F-11,51.3,18.4,91,23-May,16-Nov,NaN,72,NaN
그리고 코드 :
Variable_Extractor <- function(dataset) {
vars = names(dataset)
for (i in vars) {
if (is.factor(dataset[[i]][1]) == TRUE) {
vars = vars[vars != i]
}
}
return(vars)
}
Identify_Min_Max <- function(dataset, var) { #var must be a string column name
a = min(dataset[[var]], na.rm = TRUE)
b = max(dataset[[var]], na.rm = TRUE)
return(c(a,b))
}
ui <- fluidPage(
titlePanel('Illinois Yield Trials'),
sidebarLayout(position = 'left',
sidebarPanel(
selectInput('var', 'Choose variable',
c('Choose one' = '', Variable_Extractor(agridata))),
uiOutput('histslider'),
numericInput('bin_width', 'Enter binwidth',
value = 5, min = 0, max = 1000)),
mainPanel(div(style = "position:relative",
plotOutput('plot')))
)
)
server <- function(input, output) {
output$histslider <- renderUI({
valhist <- Identify_Min_Max(agridata, toString(input$var))
sliderInput(inputId = 'sliderhist',
label = paste("Select values for ", input$var, sep = ''),
min=valhist[1],
max=valhist[2],
value=valhist,
sep= '')
})
plt <- reactiveValues()
output$plot <- renderPlot({
plt$p <- ggplot()
agridatasub <- subset(agridata, agridata[[input$var]] >= input$sliderhist[1] & agridata[[input$var]] <= input$sliderhist[2])
plt$p <- plt$p + geom_histogram(data=agridatasub, aes_string(x=input$var), binwidth = input$bin_width,
color = 'black', fill = 'gray75')
return(plt$p)
})
}
shinyApp(ui=ui, server=server)
여러분의 도움에 감사드립니다! – Sydney