R中的传单:如何生成多个图标
Leaflet in R: How to generate multiple icons
我有一个数据框,其中包含我所在州所有体育场馆的列表。
这是我的数据框中的列名列表(非常自我解释):
[1] "City" "latitude" "longitude" "Rank" "Population" "County"
[7] "Desc"
我已经创建了以下所有图标:
library(leaflet)
NHL <- makeIcon(
iconUrl = "https://www-league.nhlstatic.com/images/logos/league-dark/133-flat.svg",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
MLB <- makeIcon(
iconUrl = "https://www.mlbstatic.com/team-logos/league-on-dark/1.svg",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
MLS <-makeIcon(
iconUrl = "https://league-mp7static.mlsdigital.net/styles/non-retina_desktop_logo/s3/logo25-77x77_0.png?LzMdhn2DU4GXKEjKfJ2QYWMaQKQIk7VQ&itok=ZtYZ58tI",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
NBA <-makeIcon(
iconUrl = "https://seeklogo.net/wp-content/uploads/2014/09/NBA-logo.png",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
NFL <-makeIcon(
iconUrl = "https://static.nfl.com/static/content/public/static/wildcat/assets/img/application-shell/shield/default.svg",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
我正在尝试创建一个传单图,通过显示相关图标突出显示我所在州的每个运动队场地。下面的代码将只显示一个图标(以 icon = 列表中的第一个为准)
df %>%
leaflet() %>%
addTiles() %>%
addMarkers(lat = df$Latitude, lng = df$Longitude, icon = c(MLB, NHL, NFL, MLS, NBA))
我还创建了另一个数据框(df2;下面),其中包含每个场馆(体育场名称)和相关联赛(NFL/NHL/etc),我试图将其传递给 "icon = df2$League" 但它不将其识别为对象。有什么想法吗?
> colnames(df2)
[1] "Club" "Sport" "League" "Symbol" "Venue" "City" "Latitude"
[8] "Longitude"
你没有提供可重现的数据,所以我假设你的 df 有一个包含联赛名称的列,我们可以用它来匹配图标的名称,因此我编写了一些示例数据:
library(leaflet)
library(sf)
# generate example data
set.seed(2020)
venues <- c('NHL', 'MLB', 'MLS', 'NBA', 'NFL')
nc <- st_read(system.file("shape/nc.shp", package="sf"))
df <- st_sample(nc, 5) %>%
st_coordinates() %>%
as.data.frame
df$league <- venues
df
#> X Y league
#> 1 -78.58785 35.94350 NHL
#> 2 -80.82830 35.88732 MLB
#> 3 -78.83967 36.11236 MLS
#> 4 -80.09532 35.01562 NBA
#> 5 -83.72636 35.33204 NFL
我们需要做的就是创建一个命名的 iconList
,其中图标的名称与数据框 "league" 列中的名称相匹配。使用 ~iconSet[league]
我们可以确保为 df 中的每个点使用正确的图标。
# create iconSet
iconSet <- iconList(NHL= NHL,
MLB =MLB,
MLS = MLS,
NBA = NBA,
NFL = NFL)
# map
leaflet(df) %>%
addTiles() %>%
addMarkers(lng=~X, lat=~Y, icon = ~iconSet[league])
我有一个数据框,其中包含我所在州所有体育场馆的列表。
这是我的数据框中的列名列表(非常自我解释):
[1] "City" "latitude" "longitude" "Rank" "Population" "County"
[7] "Desc"
我已经创建了以下所有图标:
library(leaflet)
NHL <- makeIcon(
iconUrl = "https://www-league.nhlstatic.com/images/logos/league-dark/133-flat.svg",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
MLB <- makeIcon(
iconUrl = "https://www.mlbstatic.com/team-logos/league-on-dark/1.svg",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
MLS <-makeIcon(
iconUrl = "https://league-mp7static.mlsdigital.net/styles/non-retina_desktop_logo/s3/logo25-77x77_0.png?LzMdhn2DU4GXKEjKfJ2QYWMaQKQIk7VQ&itok=ZtYZ58tI",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
NBA <-makeIcon(
iconUrl = "https://seeklogo.net/wp-content/uploads/2014/09/NBA-logo.png",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
NFL <-makeIcon(
iconUrl = "https://static.nfl.com/static/content/public/static/wildcat/assets/img/application-shell/shield/default.svg",
iconWidth = 31*215/230,
iconHeight = 31,
iconAnchorY = 16,
iconAnchorX = 31*215/230/2)
我正在尝试创建一个传单图,通过显示相关图标突出显示我所在州的每个运动队场地。下面的代码将只显示一个图标(以 icon = 列表中的第一个为准)
df %>%
leaflet() %>%
addTiles() %>%
addMarkers(lat = df$Latitude, lng = df$Longitude, icon = c(MLB, NHL, NFL, MLS, NBA))
我还创建了另一个数据框(df2;下面),其中包含每个场馆(体育场名称)和相关联赛(NFL/NHL/etc),我试图将其传递给 "icon = df2$League" 但它不将其识别为对象。有什么想法吗?
> colnames(df2)
[1] "Club" "Sport" "League" "Symbol" "Venue" "City" "Latitude"
[8] "Longitude"
你没有提供可重现的数据,所以我假设你的 df 有一个包含联赛名称的列,我们可以用它来匹配图标的名称,因此我编写了一些示例数据:
library(leaflet)
library(sf)
# generate example data
set.seed(2020)
venues <- c('NHL', 'MLB', 'MLS', 'NBA', 'NFL')
nc <- st_read(system.file("shape/nc.shp", package="sf"))
df <- st_sample(nc, 5) %>%
st_coordinates() %>%
as.data.frame
df$league <- venues
df
#> X Y league
#> 1 -78.58785 35.94350 NHL
#> 2 -80.82830 35.88732 MLB
#> 3 -78.83967 36.11236 MLS
#> 4 -80.09532 35.01562 NBA
#> 5 -83.72636 35.33204 NFL
我们需要做的就是创建一个命名的 iconList
,其中图标的名称与数据框 "league" 列中的名称相匹配。使用 ~iconSet[league]
我们可以确保为 df 中的每个点使用正确的图标。
# create iconSet
iconSet <- iconList(NHL= NHL,
MLB =MLB,
MLS = MLS,
NBA = NBA,
NFL = NFL)
# map
leaflet(df) %>%
addTiles() %>%
addMarkers(lng=~X, lat=~Y, icon = ~iconSet[league])