блестящий - нажмите на карту с гистограммой, которая неправильно выделяет полосу - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь создать интерактивный график, который показывает карту США слева и гистограмму справа. Каждая точка данных на столбцах гистограммы соответствует состоянию и отражает количество X выбранных данных. И карта США, и гистограмма генерируются, но когда я нажимаю на штат на карте США, вся гистограмма становится красной, а не только полоска, которая соответствует выбранному штату.

Заранее спасибо.

Изображение сгенерированного графика и выпуска

Код, используемый в настоящее время:

 library(ggplot2)
 library(maps)

импорт данных

 usaMap <- map_data("state")

 USArrests <- read.csv("Test.csv")

определяет функцию, которая находит, на какое состояние указывать. Эта функция получает данные от щелчка и дает название состояния, на которое нажимают

 which_state <- function(mapData, long, lat) {
 mapData$long_diff <- mapData$long - long
 mapData$lat_diff <- mapData$lat - lat
 mapData <- mapData[abs(mapData$long_diff) < 20 & 
abs(mapData$lat_diff) < 15, ]
 vLong <- mapData$long_diff
 vLat <- mapData$lat_diff
 mapData$angle <- acos(vLong / sqrt(vLong^2 + vLat^2))
rangeAngle <- tapply(mapData$angle, mapData$region, function(x) 
 max(x) - min(x))
return(names(sort(rangeAngle, decreasing = TRUE))[1])
   }

сборка приложения

   library(shiny)
    plotMap <- ggplot(usaMap, aes(x = long, y = lat, group = 
  group)) 
  + 
 geom_polygon(fill = "white", color = "black")
 plotArrest <- ggplot(USArrests, aes(x=State, y=Date)) +
 geom_bar(stat = "identity")

ui <- shinyUI(fluidPage(
column(
width = 6,
plotOutput("map", click = "clickMap", width = 430, height = 275)
 ),
column(
width = 6,
plotOutput("arrest", width = 430, height = 275)
   )
  ))

   server <- shinyServer(function(input, output) {
  # intital plots
  output$map <- renderPlot({
  plotMap
  # coord_map(), do not use it. More discussion next section.
   })
  output$arrest <- renderPlot({
plotArrest
 })

участок после клика

observeEvent(input$clickMap, {
xClick <- input$clickMap$x
yClick <- input$clickMap$y
state <- which_state(usaMap, xClick, yClick)

 output$map <- renderPlot(
  plotMap + 
    geom_polygon(data = usaMap[usaMap$region == state,], fill = 
 "yellow") +
    annotate("text", x = xClick, y = yClick, label = state, color 
   = "red"))

 output$arrest <- renderPlot({
  plotArrest + geom_bar(stat = "identity",  size = 1, shape = 2, 
color = "red")
})
})
})
shinyApp(ui, server)
...