gpt4 book ai didi

r - R 中的传单以不可预测的方式绘制图标

转载 作者:行者123 更新时间:2023-12-04 09:43:55 26 4
gpt4 key购买 nike

我的 Shiny 应用程序采用这样的数据框:

enter image description here

并通过允许用户选择一个人 ( P1_name ) 和一个日期 ( date ) 来适本地设置子集。

最初启动时,它看起来像这样:

enter image description here

很明显,该应用程序无法正常工作。 Apple Valley镇的位置应该有一个字母'N',但实际上什么也没有。我不知道为什么,因为 DF 已正确子集化:

enter image description here

并且图层应该正确绘制:

m <- leaflet(DF) %>%
addTiles() %>% # Add default OpenStreetMap map tiles
setView(lat=setzoom[1], lng=setzoom[2], zoom=zoom_num) %>%
addMarkers(lat=subset(DF, P1_outcome=='W')$lat, lng=subset(DF, P1_outcome=='W')$lon, icon = icon_W) %>%
addMarkers(lat=subset(DF, P1_outcome=='L')$lat, lng=subset(DF, P1_outcome=='L')$lon, icon = icon_L) %>%
addMarkers(lat=subset(DF, P1_outcome=='D')$lat, lng=subset(DF, P1_outcome=='D')$lon, icon = icon_D) %>%
addMarkers(lat=subset(DF, P1_outcome=='N')$lat, lng=subset(DF, P1_outcome=='N')$lon, icon = icon_N)

不幸的是,这只是我的应用程序显示的某种精神 split 症行为的一种症状。如果这是唯一的问题,我会很高兴。相反,假设我选择了 John Doe,在他的第一行(应该是 Crecent City)

enter image description here

和 BOOM 我得到:

enter image description here

Leaflet怎么会认为我给了它两组坐标来绘制,以及是什么让它认为John Doe正在太平洋的某个地方游泳。

这里没有任何意义。我在它输出的困惑中看不到模式。它只有不到 100 行简单的代码。

一些想法:
  • conditionalPanel正在混淆我的数据框?我不这么认为,因为我可以 View(DF)并看到这部分不是问题。
  • 图标中的分层不起作用?不确定这会有什么问题,因为我们 know这是绘制图标的正确方法。
  • 我收到了 xtable警告,Warning in run(timeoutMs) : data length exceeds size of matrix ,但这仅适用于 tableOutput部分,我认为这与我所困扰的任何问题都无关。

  • 我难住了。一整天都被困在这个问题上。如果有人有任何见解、想法、咒语等,我很想听听。

    UI.R
    library(shiny)
    library(ggplot2)
    library(dplyr)
    library(leaflet)
    library(data.table)
    options(xtable.include.rownames=F)
    library(ggmap)
    library(lubridate)

    DF <- data.frame(lon=c(-120.6596156, -87.27751, -119.7725868, -124.2026, -117.1858759),
    lat=c(35.2827524, 33.83122, 36.7468422, 41.75575, 34.5008311),
    date=c('2014-03-14', '2014-01-11', '2013-11-22', '2012-08-23', '2013-08-23'),
    location=c('San Luis Obispo', 'Jasper', 'Fresno', 'Crescent City', 'Apple Valley'),
    P1_name=c('John Doe', 'John Doe', 'John Doe', 'John Doe', 'Joe Blow'),
    P1_outcome=c('W', 'L', 'D', 'W', 'N'))

    DF$date <- as.Date(DF$date, format="%Y-%m-%d")
    DF <- arrange(DF, P1_name, date)
    DT <- data.table(DF)
    DT[, .date := sequence(.N), by = "P1_name"]
    DF$date <- paste(DF$date, ' (', DT$.date, ')', sep='')
    DF <- arrange(DF, P1_name, desc(date))
    DF$P1_name <- as.character(DF$P1_name)
    DF$P1_outcome <- as.character(DF$P1_outcome)
    DF$location <- as.character(DF$P1_location)
    #str(DF$P1_outcome)

    icon_W <- makeIcon(
    iconUrl = "http://i58.tinypic.com/119m3r5_th.gif",
    iconWidth = 10, iconHeight = 23,
    iconAnchorX = 10, iconAnchorY =23
    )

    icon_L <- makeIcon(
    iconUrl = "http://i62.tinypic.com/2dulcvq_th.jpg",
    iconWidth = 10, iconHeight = 23,
    iconAnchorX = 10, iconAnchorY = 23
    )

    icon_D <- makeIcon(
    iconUrl = "http://i58.tinypic.com/2zox2yf_th.gif",
    iconWidth = 10, iconHeight = 23,
    iconAnchorX = 10, iconAnchorY = 23
    )

    icon_N <- makeIcon(
    iconUrl = "http://i62.tinypic.com/339j7de_th.gif",
    iconWidth = 10, iconHeight = 23,
    iconAnchorX = 22, iconAnchorY = 94
    )

    server <- function(input, output, session) {

    output$dates<-renderUI({
    selectInput('dates', 'by date / number', choices=DF[which(DF$P1_name == input$person), ]$date, selectize = FALSE)
    })

    output$map<-renderLeaflet({
    validate(
    need(!is.null(input$dates),""),
    need(!is.null(input$person),"")
    )

    if(input$radio=='by date'){
    DF <- filter(DF, P1_name==input$person, date==input$dates)
    View(DF)
    zoom_num <- 5
    setzoom <- c(DF$lat, DF$lon)
    outcome <- data.frame(DF$P1_outcome, DF$location)
    output$table <- renderTable(outcome)
    }
    else{
    DF <- filter(DF, P1_name==input$person)
    View(DF)
    zoom_num <- 2
    setzoom <- c(DF$lat[1], DF$lon[1])
    outcome <- data.frame(DF$P1_outcome, DF$location)
    output$table <- renderTable(outcome)
    }



    m <- leaflet(DF) %>%
    addTiles() %>% # Add default OpenStreetMap map tiles
    setView(lat=setzoom[1], lng=setzoom[2], zoom=zoom_num) %>%
    addMarkers(lat=subset(DF, P1_outcome=='W')$lat, lng=subset(DF, P1_outcome=='W')$lon, icon = icon_W) %>%
    addMarkers(lat=subset(DF, P1_outcome=='L')$lat, lng=subset(DF, P1_outcome=='L')$lon, icon = icon_L) %>%
    addMarkers(lat=subset(DF, P1_outcome=='D')$lat, lng=subset(DF, P1_outcome=='D')$lon, icon = icon_D) %>%
    addMarkers(lat=subset(DF, P1_outcome=='N')$lat, lng=subset(DF, P1_outcome=='N')$lon, icon = icon_N)
    }) #<- end output$map
    } #<- end server function

    ui <- fluidPage(
    titlePanel("Location Explorer"),
    sidebarLayout (
    sidebarPanel(
    selectInput('person', 'Select person', choices=unique(DF$P1_name), selectize = FALSE),
    radioButtons('radio', 'Select row(s)', choices=c('by date', 'all'), selected = NULL, inline = TRUE),
    conditionalPanel(
    condition = "input.radio == 'by date'",
    uiOutput('dates')
    ),
    conditionalPanel(
    condition = "input.radio == 'all'"
    )
    ),
    mainPanel(
    leafletOutput('map'),
    fluidRow(column(4, tableOutput('table')))
    ))
    ) #<- end ui

    shinyApp(ui = ui, server = server)

    最佳答案

    问题之一可能是您在子集中添加了空标记和 leaflet对此 react 很奇怪。

    例如,当您选择 Joe Blow 时,P1_outcome == "W" 的所有子集, "L""D"是空的。

    如所述 here ,您可以使用 iconList改变图标的​​功能取决于P1_outcome并删除所有 subset .

    例如,您可以添加:

    icon_list <- iconList(W=icon_W,L=icon_L,D=icon_D,N=icon_N)

    在定义所有图标后,立即使用:
    m <- leaflet(DF) %>%
    addTiles() %>% # Add default OpenStreetMap map tiles
    setView(lat=setzoom[1], lng=setzoom[2], zoom=zoom_num) %>%
    addMarkers(lat=DF$lat, lng=DF$lon,icon= ~icon_list[DF$P1_outcome])

    创建您的 map 。

    关于r - R 中的传单以不可预测的方式绘制图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32031432/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com