如何让我的数据正确呈现?
How do I get my data to render correctly?
有人可以检查我的代码以确保其全部正确吗?我已经读取了数据并且看起来一切正常,就在我去 运行 闪亮时,图表出现了,但没有数据。我用 # 隐藏了程序的一些功能,因为我无法正确地获得 select 的附加变量。我已经包含了 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)
基本上我想做的是 select 城镇,然后是年份和一个变量(列 5:9 - 但是那根本行不通),所以我现在选择了 Sunshine 列.然后绘制 X 轴上的 month_year 列与 Y 轴上的阳光列,颜色/按年份填充作为 id 希望你可以 select 多年。希望这能让我清楚地知道我在做什么。
提前致谢。
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)
该应用程序按预期工作,图中没有任何内容的原因是数据在 sunshine
栏中有一些 NA,并且输入的选择基于 levels
的变量,但不是它的 unique
值。所有这些结合起来将在 selectInput 中产生不会出现在图中的选择。而是尝试做:
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
})
有人可以检查我的代码以确保其全部正确吗?我已经读取了数据并且看起来一切正常,就在我去 运行 闪亮时,图表出现了,但没有数据。我用 # 隐藏了程序的一些功能,因为我无法正确地获得 select 的附加变量。我已经包含了 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)
基本上我想做的是 select 城镇,然后是年份和一个变量(列 5:9 - 但是那根本行不通),所以我现在选择了 Sunshine 列.然后绘制 X 轴上的 month_year 列与 Y 轴上的阳光列,颜色/按年份填充作为 id 希望你可以 select 多年。希望这能让我清楚地知道我在做什么。 提前致谢。
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)
该应用程序按预期工作,图中没有任何内容的原因是数据在 sunshine
栏中有一些 NA,并且输入的选择基于 levels
的变量,但不是它的 unique
值。所有这些结合起来将在 selectInput 中产生不会出现在图中的选择。而是尝试做:
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
})