r语言 - 我如何得到我的数据正确渲染?



有人可以检查我的代码,以确保其全部正确?我已经读了数据,看起来都很好,就在我去运行闪亮的时候,图表出现了,但没有数据。我用#隐藏了程序中的一些功能,因为我无法获得正确选择的其他变量。我已经为weather_files、weather_years和天气数据包含了一些数据。

weather_files

structure(list(Town = structure(c(2L, 4L, 2L, 1L, 1L, 1L, 1L, 
4L, 1L, 4L, 5L, 1L, 2L, 4L, 2L, 5L, 5L, 1L, 3L, 4L, 3L, 3L, 5L, 
5L, 5L), .Label = c("braemar", "dunstaffnage", "nairn", "stornoway", 
"tiree"), class = c("ordered", "factor")), year = structure(c(132L, 
37L, 128L, 100L, 137L, 147L, 143L, 22L, 103L, 89L, 96L, 138L, 
109L, 87L, 142L, 109L, 61L, 138L, 136L, 75L, 112L, 92L, 118L, 
100L, 66L), .Label = c("1873", "1874", "1875", "1876", "1877", 
"1878", "1879", "1880", "1881", "1882", "1883", "1884", "1885", 
"1886", "1887", "1888", "1889", "1890", "1891", "1892", "1893", 
"1894", "1895", "1896", "1897", "1898", "1899", "1900", "1901", 
"1902", "1903", "1904", "1905", "1906", "1907", "1908", "1909", 
"1910", "1911", "1912", "1913", "1914", "1915", "1916", "1917", 
"1918", "1919", "1920", "1921", "1922", "1923", "1924", "1925", 
"1926", "1927", "1928", "1929", "1930", "1931", "1932", "1933", 
"1934", "1935", "1936", "1937", "1938", "1939", "1940", "1941", 
"1942", "1943", "1944", "1945", "1946", "1947", "1948", "1949", 
"1950", "1951", "1952", "1953", "1954", "1955", "1956", "1957", 
"1958", "1959", "1960", "1961", "1962", "1963", "1964", "1965", 
"1966", "1967", "1968", "1969", "1970", "1971", "1972", "1973", 
"1974", "1975", "1976", "1977", "1978", "1979", "1980", "1981", 
"1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", 
"1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", 
"1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005", 
"2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", 
"2014", "2015", "2016", "2017", "2018", "2019", "2020"), class = 
"factor"), 
month_year = structure(c(10L, 7L, 2L, 7L, 6L, 11L, 8L, 3L, 
4L, 3L, 12L, 6L, 1L, 7L, 3L, 9L, 4L, 4L, 8L, 4L, 10L, 3L, 
4L, 10L, 8L), .Label = c("April", "August", "December", "February", 
"January", "July", "June", "March", "May", "November", "October", 
"September"), class = "factor"), month = c(11, 6, 8, 6, 7, 
10, 3, 12, 2, 12, 9, 7, 4, 6, 12, 5, 2, 2, 3, 2, 11, 12, 
2, 11, 3), `Maximum Temp` = c(104, 134, 191, 132, 178, 98, 
76, 8, 6, 58, 151, 17, 121, 158, 81, 132, 71, 23, 82, 29, 
93, 59, 81, 93, 101), `Minimum Temp` = c(63, 8, 115, 5, 82, 
2, 1, 26, 22, 11, 101, 89, 36, 87, 28, 75, 31, 58, 16, 21, 
42, 1, 31, 41, 66), `Air Frost Days` = c(2, 0, 0, 0, 0, 12, 
13, 4, 17, 19, 0, 0, 2, 0, 3, 0, 2, 24, 6, 17, 2, 12, 2, 
1, 0), `Rainfall (mm)` = c(1074, 564, 107, 636, 884, 642, 
684, 1789, 356, 104, 1281, 93, 247, 744, 2712, 78, 904, 156, 
416, 111, 841, 466, 2463, 1104, 1091), Sunshine = c(NA, NA, 
1538, 1431, NA, NA, NA, NA, 801, 263, 1375, NA, NA, 206, 
NA, 1993, 723, NA, 1068, 863, 339, NA, 459, 456, 628)), row.names = 
c(NA, 
-25L), class = c("tbl_df", "tbl", "data.frame"))

读取它的人,Shiny的输入数据是这样的:

weather_data <- levels(weather_files$Town)
Weather_years <- levels(weather_files$year)
Weather_month <- levels(weather_files$month_year)

基本上我想做的是选择城镇,然后是年份和一个变量(列5:9 -但这根本不起作用),所以我现在选择了阳光列。然后在X轴上绘制月-年列与Y轴上的阳光列,按年着色/填充,因为我希望您可以选择多年。希望这能让你明白我在做什么。提前感谢。

ui <- fluidPage(
titlePanel("Met Office Weather"),

sidebarLayout(
sidebarPanel(
selectInput(label = ("Select Data Set"),
inputId = "Town",
choices = weather_data,
multiple = TRUE),

selectInput(label = "Select Year",              
inputId = "year",
choices = Weather_years,
multiple = TRUE),

#selectInput(inputId = "selection",
#             label="Select Variable",
#             choices = c("Sunshine"),
#           multiple = FALSE),

actionButton(inputId = "go", label = "Plot Data")
),
# Show the generated plot
mainPanel(
tabsetPanel(
tabPanel("scatterplot", plotOutput("scatter")),
tabPanel("Barplot", plotOutput("barplot")),
tabPanel("The Data", dataTableOutput("table"))
)
)
)
)

server <- function(input, output) {
select_weatherdf <- reactive({
# gather info from user but only when asked
pick_town <- isolate(input$Town)
select_year <- isolate(input$year)
#choose_variable <- isolate(input$Sunshine)
# listen to go button
input$go
# select the correct town and year looking at sunshine variable only
weather_to_plot <- weather_files %>% filter(Town %in% pick_town, year %in% select_year)
#weather_to_plot <- weather_to_plot %>% select("Town", "year", "month_year", "Sunshine")
return(weather_to_plot)
})
output$scatter <- renderPlot({
data_to_plot <- select_weatherdf()
ggplot(data_to_plot, aes(x = month_year, y = Sunshine , fill = year)) +
geom_point(size = 2.5) +
scale_x_discrete(limits = month.name)

})
output$barplot <- renderPlot({
data_to_plot <- select_weatherdf()
ggplot(data_to_plot, aes(x = month_year, fill = year)) + 
geom_bar() +
scale_x_discrete(limits = month.name)
})

output$table <- renderDataTable({
data_to_plot <- select_weatherdf()
})
}
# Run the application 
shinyApp(ui = ui, server = server)

应用程序按预期工作,图中没有任何东西的原因是因为数据在sunshinecol中有一些NA,输入的选择是基于变量的levels,而不是来自它的unique值。所有这些组合将在selectInput's中产生在图中不存在的选项。不如试试这样做:

weather_data <- unique(weather_files$Town)
Weather_years <- unique(weather_files$year)
Weather_month <- unique(weather_files$month_year)

这将缩小数据集中观察到的数据的输入选择。

我们可以选择像这样创建活性select_weatherdf:

select_weatherdf <- eventReactive(input$go, {
weather_files %>% filter(Town %in% input$Town, year %in% input$year) %>% 
select("Town", "year", "month_year", "Sunshine")
#no need for a return statement here R will return the last value called from the function
})

最新更新