Reputation: 199
Using this we have a map with data points:
Load data:
countries <- structure(list(country = structure(c(5L, 6L, 3L, 4L, 10L, 8L,
11L, 7L, 1L, 13L, 9L, 12L, 2L), .Label = c("Australia", "China",
"France", "Georgia", "India", "Ireland", "Malaysia", "Poland",
"Qatar", "Singapore", "South Africa", "Spain", "USA"), class = "factor"),
Latitude = c(20.593684, 53.142367, 46.227638, 32.165622,
1.352083, 51.919438, -30.559482, 4.210484, -25.274398, 37.09024,
25.354826, 40.463667, 35.86166), Longitude = c(78.96288,
-7.692054, 2.213749, -82.900075, 103.819836, 19.145136, 22.937506,
101.975766, 133.775136, -95.712891, 51.183884, -3.74922,
104.195397), Value = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 1L, 2L, 2L)), .Names = c("country", "Latitude", "Longitude",
"Value"), class = "data.frame", row.names = c(NA, -13L))
Code for map plot using this:
library(maps)
library(ggplot2)
base_world <- map_data("world")
p <- ggplot() +
geom_polygon(data=base_world, aes(x=long, y=lat, group=group)) +
geom_point(data=countries, aes(x=Longitude, y=Latitude, colour="blue"), size=5, alpha=I(0.7))
I try to connect to points. Example I want to connect: Spain - China USA - Spain
What I have until now is this:
p + geom_line(data=countries, aes(x=Longitude, y=Latitude), color="black", size=1)
and this connects all points in the map. Is it possible to connect only specific values and show in the data point in the map the number of value column?
Also this is what I tried for number labels in every point (Value)
p + geom_text(aes(label=countries$Value),hjust=0, vjust=0, aes(x=Longitude, y=Latitude))
Error: ggplot2 doesn't know how to deal with data of class uneval
Example of the list with more than two points (every row is a different connection):
("USA", "Spain","China")
("Australia", "Poland")
Upvotes: 1
Views: 776
Reputation: 28825
You can get a subset based on the points you want to be connected;
link1 <- countries[countries$country %in% c("USA", "Spain","China"), ]
link2 <- countries[countries$country %in% c("Australia", "Poland"), ]
base_world <- map_data("world")
p <- ggplot() +
geom_polygon(data=base_world, aes(x=long, y=lat, group=group)) +
geom_line(data=link1, aes(x=Longitude, y=Latitude), color="red", size=1) +
geom_line(data=link2, aes(x=Longitude, y=Latitude), color="green", size=1) +
geom_point(data=countries, aes(x=Longitude, y=Latitude), colour = "cyan", size=5, alpha=I(0.7)) + #set the color outside of `aes`
theme(text = element_text(size=20), legend.position="none") #remove the legend
and your plot would look like:
> p
You may need to play around a little bit for formatting issues.
Upvotes: 2