在AddCircleMarkers,ShinyR,leaflet map中设置半径为nrow

时间:2016-10-23 08:00:59

标签: r shiny leaflet

我有几个城市的400,000行数据(data)。我希望通过传单可视化他们的位置和不同的属性。例如,我想根据给定城市的样本编号设置圆形大小。我得到了正确的位置,但我无法改变半径。我在下面尝试了这个,其中CityCoordinateData是3列的df:所有城市的单行,即位置,他们的Lon和Lat以及unique(data$City)CityCoordinateData$Location具有相同的元素

m<-leaflet() %>%
      addTiles() %>% 
      setView(20, 47, zoom = 13) %>% 
      addCircleMarkers(CityCoordinateData$Lon, CityCoordinateData$Lat, radius=nrow(data[grep(CityCoordinateData$Location, data$City),])

Grep似乎只使用第一个元素的nrow。我也试过这个,它开始运行但从未结束:

radius=nrow(subdata[grep(paste(CityCoordinateData$Location,collapse = "|"), data$City, value=TRUE),]) 

感谢任何提示!

可以像这样模拟数据样本:

CityCoordinateData <- data.frame(Location=as.factor(c("Dorog", "Eger", "Erd")), Lon=c(17,18,19), Lat=c(40,41,42))
data <- data_sample<-data.frame(City=as.factor(c("Dorog", "Eger", "Erd", "Dorog", "Dorog", "Eger")), Variable=c(11,12,13,14,15,16))

所以我在这个例子中我希望“Dorog”的位置用半径为3的圆圈标记,“Eger”2和“Erd”1。

1 个答案:

答案 0 :(得分:0)

您的数据每个位置都有多个值。如果正确,每个位置将有几个圆圈。这是我试过的代码。

library(leaflet)

CityCoordinateData <- data.frame(Location=c("Dorog", "Eger", "Erd"), 
                                 Lon=c(17,18,19), Lat=c(40,41,42))
data<-data_sample <- data.frame(City=c("Dorog", "Eger", "Erd", "Dorog", "Dorog", "Eger"), 
                                Variable=c(11,12,13,14,15,16))

names(CityCoordinateData)[1] <- c("City")

xy <- merge(CityCoordinateData, data)

leaflet(data = xy) %>%
  addTiles() %>%
  addCircleMarkers(~Lon, ~Lat, radius = ~Variable)

enter image description here