Ich mache mich vertraut mit Shiny, aber vertraut könnte ein bisschen eine Übertreibung sein ... Ich versuchte die Shiny Tutorials, speziell ich würde Lesson 5 für meine eigene data anpassen.Shiny und ggplot2 - Tutorial
habe ich ein zusätzliches R-Script help.R
, wie im Tutorial:
percent_map <- function(var, color, legend, min = 0, max = 100) {
# constrain gradient to percents that occur between min and max
var <- pmax(var, min)
var <- pmin(var, max)
#plot
aha <- ggplot(abst, aes(long,lat, group=group))+
geom_polygon(aes(fill=var))+
coord_fixed()+
scale_fill_gradient(low = "lightskyblue", high = color,
space = "Lab", na.value = "lightblue")+
labs(title=var, x="", y="")+
theme(axis.text=element_blank(),
axis.ticks=element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank()
)
print(aha)
}
Meine ui.R
:
library(shiny)
# Define UI for application that draws a histogram
shinyUI(fluidPage(
titlePanel("Ja-Anteil von Abstimmungen"),
sidebarLayout(
sidebarPanel(
helpText("Create maps with information from ballot outcomes."),
selectInput("var",
label = "Choose a variable to display",
choices = c("Epidemiegesetz",
"BG",
"1:12",
"Familien",
"Nationalstrassenabgabegesetz"),
selected = "Epidemiegesetz"),
sliderInput("range",
label = "Range of interest:",
min = 0, max = 100, value = c(0, 100))
),
mainPanel(plotOutput("map"))
)
))
Und meine server.R
:
library(ggplot2)
abst <- readRDS("~/try.RDS")
abst$KANTONSNR <- as.numeric(abst$KANTONSNR)
source("~/help.R")
library(shiny)
shinyServer(
function(input, output) {
output$map <- renderPlot({
data <- switch(input$var,
"Epidemiegesetz" = abst$Epidemiegesetz,
"BG" = abst$BG,
"1:12" = abst$Loehne,
"Familien" = abst$Familien,
"Nationalstrassenabgabegesetz" = abst$Nationalstrassenabgabegesetz)
color <- switch(input$var,
"Epidemiegesetz" = "darkgreen",
"BG" = "red",
"1:12" = "darkorange",
"Familien" = "darkviolet",
"Nationalstrassenabgabegesetz" = "darkblue")
legend <- switch(input$var,
"Epidemiegesetz" = "Epidemiegesetz",
"BG" = "BG",
"1:12" = "Sozis",
"Familien" = "Familien",
"Nationalstrassenabgabegesetz" = "blablabla")
percent_map(var = data, color = color, max = input$range[2], min = input$range[1])
})
}
)
Aber das ist nicht auch aus der Ferne arbeiten:
Error: arguments imply differing number of rows: 0, 179493
Was mache ich falsch? Vielen Dank im Voraus.
Können Sie versuchen, das Problem einzugrenzen? Ich habe versucht, ein statisches Diagramm (d. H. Ohne Glanz) zu erstellen, und es wird "Fehler: Diskreter Wert an kontinuierlichen Maßstab geliefert". Sind Sie sicher, dass der Zeichencode wie erwartet funktioniert? – tonytonov
Ich bin mir sicher, dass die Handlung funktioniert, wenn ich eine normale ggplot Map erzeuge (natürlich muss der 'scale_fill_gradient' Befehl' high' angegeben werden. – Thomas