I have an array that tells me the number of observations per country.
countries <- structure(c(532L, 3L, 1L, 15L, 1L, 1L, 2L, 3L, 16L, 2L, 43L,
1L, 2L, 2L, 1L, 1L, 1L, 3L, 2L, 1L, 4L, 4L, 16L, 13L, 2L, 2L,
9L, 1L, 1L, 5L, 3L, 5L, 1L, 1L, 3L, 1L, 10L, 11L, 4L, 2L, 1L,
7L, 1L, 2L, 6L, 7L, 1L, 6L, 1L, 2L, 7L, 1L, 20L, 1L, 2L, 1L,
3L, 2L, 5L, 76L, 2L, 1L, 1L), .Dim = 63L, .Dimnames = structure(list(
c("United States", "Argentina", "Armenia", "Australia", "Austria",
"Bangladesh", "Belarus", "Belgium", "Brazil", "Bulgaria",
"Canada", "Chile", "China", "Colombia", "Croatia", "Cuba",
"Cyprus", "Czech Republic", "Dominican Republic", "Ecuador",
"Estonia", "France", "Germany", "Greece", "Guatemala", "Hong Kong",
"India", "Indonesia", "Iran", "Ireland", "Israel", "Italy",
"Kazakhstan", "Kenya", "Latvia", "Malaysia", "Mexico", "Netherlands",
"New Zealand", "Norway", "Peru", "Philippines", "Poland",
"Portugal", "Romania", "Russia", "Saudi Arabia", "Serbia",
"Singapore", "Slovakia", "South Africa", "South Korea", "Spain",
"Sri Lanka", "Sweden", "Switzerland", "Thailand", "Turkey",
"Ukraine", "United Kingdom", "Uruguay", "Uzbekistan", "Venezuela"
)), .Names = ""))
I am able to plot a map using the maps library. But I would appreciate the help in making it look better.
library(maps)
map(database="world")
map(database="world", col=countries, fil=countries)
legend("topleft", fill = countries, legend = countries, col = countries)
box()
The first big problem is the legend. A continuous scale would probably look better than one color per country, not sure how to do that. After fixing that, anything that can be done to make it look better would be much appreciated.
Thanks!
I can make a dynamic map using googleVis, but I'm having troubles with making an static map using ggplot2. For example, with ggplot2 it looks like I have no one in the US.
This is my code
#Load My data
countries <- structure(list(country = c("United States", "Afghanistan", "Albania",
"Argentina", "Armenia", "Australia", "Austria", "Bahrain", "Bangladesh",
"Belarus", "Belgium", "Bosnia and Herzegovina", "Brazil", "Bulgaria",
"Canada", "Chile", "China", "Colombia", "Croatia", "Cuba", "Cyprus",
"Czech Republic", "Denmark", "Dominican Republic", "Ecuador",
"Egypt", "El Salvador", "Estonia", "Finland", "France", "Germany",
"Greece", "Guatemala", "Haiti", "Hong Kong", "Hungary", "Iceland",
"India", "Indonesia", "Iran", "Ireland", "Israel", "Italy", "Japan",
"Jordan", "Kazakhstan", "Kenya", "Korea, South", "Latvia", "Libya",
"Lithuania", "Macedonia", "Malaysia", "Malta", "Mexico", "Moldova",
"Morocco", "Netherlands", "New Zealand", "Nicaragua", "Niger",
"Nigeria", "Norway", "Pakistan", "Panama", "Peru", "Philippines",
"Poland", "Portugal", "Romania", "Russia", "Saudi Arabia", "Serbia",
"Singapore", "Slovakia", "Slovenia", "Somalia", "South Africa",
"South Korea", "Spain", "Sri Lanka", "Sweden", "Switzerland",
"Taiwan", "Thailand", "Turkey", "Ukraine", "United Arab Emirates",
"United Kingdom", "Uruguay", "Uzbekistan", "Venezuela", "Zimbabwe"
), count = c(1224L, 1L, 1L, 4L, 2L, 40L, 2L, 1L, 2L, 5L, 8L,
2L, 40L, 3L, 106L, 4L, 16L, 10L, 8L, 4L, 2L, 5L, 4L, 5L, 3L,
1L, 2L, 5L, 1L, 10L, 26L, 41L, 3L, 1L, 3L, 2L, 1L, 34L, 2L, 3L,
10L, 4L, 19L, 1L, 1L, 1L, 1L, 1L, 4L, 1L, 3L, 1L, 2L, 2L, 36L,
1L, 1L, 31L, 10L, 1L, 1L, 1L, 2L, 6L, 2L, 3L, 29L, 7L, 11L, 13L,
21L, 5L, 9L, 6L, 3L, 2L, 1L, 22L, 2L, 42L, 1L, 3L, 5L, 2L, 6L,
5L, 13L, 2L, 157L, 4L, 1L, 5L, 1L)), .Names = c("country", "count"
), row.names = c(NA, -93L), class = "data.frame")
#Make dynamic map
library(googleVis)
# Make the map!
geoMap <- gvisGeoMap(countries, locationvar="country", numvar="count",
options=list(dataMode="regions"))
plot(geoMap)
#Make ggplot2 map
library(maps)
library(ggplot2)
#load world data
world <- map_data("world")
#Delete Antarctica
world <- subset(world,region!="Antarctica")
#Add count
world$count<-countries$count[match(world$region,countries$country,nomatch=NA)]
qplot(long, lat, data = world, group = group, fill=count, geom ="polygon",ylab="",xlab="")
Why is the ggplot2 map wrong? How can I fix it?
Thanks!
To create a world map using it we will use the geom_map() function of the ggplot2 package of the R Language.
R is a powerful and flexible tool. R can be used from calculating data sets to creating graphs and maps with the same data set. R is also free, which makes it easily accessible to anyone.
Static maps are useful for creating figures for reports and presentation. Sometimes, however, you want to interact with your data. You can use the leaflet package for R to overlay your data on top of interactive maps.
This may not be exactly what you want, but here is a solution using the googleVis
package.
# I had to change your data a little bit
countries2 <- data.frame(country=names(countries), count=as.integer(countries),
stringsAsFactors=FALSE)
# Install the googleVis package and load it
# install.packages("googleVis")
library(googleVis)
# Make the map!
geoMap <- gvisGeoMap(countries2, locationvar="country", numvar="count",
options=list(dataMode="regions"))
plot(geoMap)
This will make an interactive Geo Map of your data, and when you mouse over the different regions, it should highlight it and display a pop-up of the count.
(My apologies - this question was just an excuse to try this package out :). )
If you want a static plot, I can try to make that as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With