Hanna
Hanna

Reputation: 69

Troubleshooting ggplot()/maps() Runtime Issue

Alright, so I'm struggling a bit in creating this map. The following code gives me this map, which is the map that I really want to use.

map(database= "world", ylim=c(15,90), xlim=c(-180,-24), fill = TRUE, projection = 'gilbert')

This is the code I used to save the map information.

map.dat <- map_data(map(database= "world", ylim=c(15,90), xlim=c(-180,-24), fill = TRUE, projection = 'gilbert'))

Now, when I run the following code, it gives me the error 'Error in eval(expr, envir, enclos) : object 'group' not found'. I'm not sure what that means.

ggplot(map.dat, aes(x=long, y=lat, group=group, fill=region)) +
  geom_polygon() +
  geom_point(data = basindf, aes(x = basindf$latitude, y = basindf$longitude)) +
  theme(legend.position = "none")

I had set 'group = NULL' and 'fill = NULL' and that seems to allow me to plot, but it only displays this, which is not what I want. The map is gone!

What can I do to fix this? Also, I want to move away from the points and create lines. How would I be able to make lines based on a certain id?

EDIT: Seems that some of you needed basindf to troubleshoot. I've added the first 20 lines below.

"","id","year","month","date","basin","latitude","longitude","wind speed"
"1","1902276N14266",1902,"October",1902-10-03,"EP",-93.8,14,30
"2","1902276N14266",1902,"October",1902-10-03,"EP",-94,14.5,30
"3","1902276N14266",1902,"October",1902-10-03,"EP",-94.2,15,30
"4","1902276N14266",1902,"October",1902-10-03,"EP",-94.3,15.5,30
"5","1902276N14266",1902,"October",1902-10-04,"EP",-94.4,16,30
"6","1902276N14266",1902,"October",1902-10-04,"EP",-94.5,16.5,30
"7","1902276N14266",1902,"October",1902-10-04,"EP",-94.6,17,30
"8","1902276N14266",1902,"October",1902-10-04,"EP",-94.7,17.5,30
"9","1902276N14266",1902,"October",1902-10-05,"EP",-94.8,18,30
"10","1902276N14266",1902,"October",1902-10-05,"EP",-94.9,18.5,30
"11","1902276N14266",1902,"October",1902-10-05,"NA",-94.9,18.7,35
"12","1902276N14266",1902,"October",1902-10-05,"NA",-94.7,18.8,45
"13","1902276N14266",1902,"October",1902-10-06,"NA",-94.4,18.9,55
"14","1902276N14266",1902,"October",1902-10-06,"NA",-94,19.1,60
"15","1902276N14266",1902,"October",1902-10-06,"NA",-93.7,19.3,65
"16","1902276N14266",1902,"October",1902-10-06,"NA",-93.3,19.5,75
"17","1902276N14266",1902,"October",1902-10-07,"NA",-92.9,19.7,85
"18","1902276N14266",1902,"October",1902-10-07,"NA",-92.5,20,90
"19","1902276N14266",1902,"October",1902-10-07,"NA",-92,20.3,90
"20","1902276N14266",1902,"October",1902-10-07,"NA",-91.5,20.7,90

Upvotes: 1

Views: 490

Answers (2)

MrFlick
MrFlick

Reputation: 206606

You have two main problems.

First, the error you are getting is because you are sepecufying aes() in the ggplot() call which means that those values inherit to all layers. That means it's trying to set a group= in the geom_point layer as well but you do not have groups for that layer. You can disable the inherited aesthetics with

ggplot(map.dat, aes(x=long, y=lat, group=group, fill=region)) +
  geom_polygon() +
  geom_point(data = basindf, aes(x = basindf$latitude, y = basindf$longitude), inherit.aes=FALSE) + 
  theme(legend.position = "none")

or you can sepecy the aes per layer

ggplot(map.dat) +
  geom_polygon(aes(x=long, y=lat, group=group, fill=region)) +
  geom_point(data = basindf, aes(x = basindf$latitude, y = basindf$longitude)) + 
  theme(legend.position = "none")

Your other problem is that you transformed your map data with a projection but not your point data. enter image description here

You can transform your data with mapproj so they are both on the same scale

ggplot(map.dat) +
  geom_polygon(aes(x=long, y=lat, group=group, fill=region)) +
  geom_point(data = data.frame(mapproject(basindf$latitude, basindf$longitude, "gilbert")), aes(x = x, y = y)) +
  theme(legend.position = "none")

This gives

enter image description here

Upvotes: 1

jeremycg
jeremycg

Reputation: 24955

The reason it was not working was because you set global aes parameters in the first call to aes, and ggplot2 was looking for group and region in the geom_points call to group and fill the points.

This technically works:

library(maps)
library(ggplot2)

ggplot() +
        geom_polygon(data = map.dat, aes(x =long, y = lat, group = group, fill = region)) +
        geom_point(data = basindf, aes(x = latitude, y = longitude)) +
        theme(legend.position = "none")

You can see your map in the bottom right, very tiny. You want to rescale your map to lat/long, or your data to whatever you have in your map.

EDIT see the answer from @MrFlick for plot rescaling.

Upvotes: 0

Related Questions