Leaflet Package loading:

library(leaflet)

Getting spatial data:

download.file("https://simplemaps.com/static/data/country-cities/bg/bg.csv","./bg.csv")
BulgariaCities<-read.csv("./bg.csv")
BulgariaCities<-BulgariaCities[complete.cases(BulgariaCities),]
BulgariaCities<-BulgariaCities[,c(1,2,3,7,8)]
print(BulgariaCities)
##            city      lat      lng capital population
## 1         Sofia 42.68333 23.31667 primary    1185000
## 2       Plovdiv 42.15000 24.75000   admin     340494
## 3         Varna 43.21667 27.91667   admin     312770
## 4        Burgas 42.50606 27.46781   admin     195966
## 5          Ruse 43.85639 25.97083   admin     184270
## 6  Stara Zagora 42.43278 25.64194   admin     143431
## 7        Pleven 43.41667 24.61667   admin     118675
## 8        Sliven 42.68583 26.32917   admin      96368
## 9       Dobrich 43.56667 27.83333   admin      94831
## 10       Shumen 43.27667 26.92917   admin      87283
## 11       Pernik 42.60000 23.03333   admin      82467
## 12      Haskovo 41.94028 25.56944   admin      79699
## 13       Vratsa 43.21000 23.56250   admin      71633
## 14   Kyustendil 42.28389 22.69111   admin      51067
## 15      Montana 43.41250 23.22500   admin      47445
## 16       Lovech 43.13333 24.71667   admin      42211
## 17      Razgrad 43.53333 26.51667   admin      38285

Preparing Icons and Popups:

BulgariaIcon <- makeIcon(iconUrl="http://www.freeflagicons.com/download/?series=magnified_flag_with_map&country=bulgaria&size=64",
iconWidth = 64, iconHeight = 48,iconAnchorX = 32, iconAnchorY = 24)
#Icon Image with Bulgaria flag colors
BulgarianPopup<-rep(NA,nrow(BulgariaCities))
for(i in 1:nrow(BulgariaCities)) {
BulgarianPopup[i]<-paste("CITY","=",BulgariaCities[i,1],"<br/>","POPULATION","=",BulgariaCities[i,5])}
#Preparing multiple popups to show each city name , and its population

Adding Multiple markers with Popups to our created map widget:

BulgariaCities %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(icon = BulgariaIcon, popup = BulgarianPopup)
## Assuming "lng" and "lat" are longitude and latitude, respectively

Drawing circles with its radius to ahow city population:

BulgariaCities %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(icon = BulgariaIcon, popup = BulgarianPopup) %>%
  addCircles(weight = 1, radius = sqrt(BulgariaCities$population)*60,color=ifelse(BulgariaCities$capital=="primary","red","blue"))
## Assuming "lng" and "lat" are longitude and latitude, respectively
## Assuming "lng" and "lat" are longitude and latitude, respectively

Adding Legends:

BulgariaCities %>%
  leaflet() %>%
  addTiles() %>%
  addMarkers(icon = BulgariaIcon, popup = BulgarianPopup) %>%
  addCircles(weight = 1, radius = sqrt(BulgariaCities$population)*60,color=ifelse(BulgariaCities$capital=="primary","red","blue")) %>%
  addLegend(labels = c("Capital","City"), colors = c("red","blue"))
## Assuming "lng" and "lat" are longitude and latitude, respectively
## Assuming "lng" and "lat" are longitude and latitude, respectively