Hi Tom,
I think fortify can help you in translating the sp object to a data.frame. Then you can use merge to join the two tables. The code bellow illustrates this, although I think there are some problems in matching country names. Another issue is that if you add coord_map(), something strange happens with Antarctica (maybe a problem in shapefile order?).
Hope this helps,
fernando
library(maptools)
gpclibPermit()
library(ggplot2)
## setwd()
load("worldmap.rdata")
world <- fortify(world.map, region = "NAME")
elect <- read.csv("Total_Electricity_Net_Generation_(Billion_Kilowatthours).csv",
sep = ",", dec = ".")
names(elect) <- c("id", "y2004", "y2005", "y2006", "y2007", "y2008")
world <- merge(world, elect, by = "id", all.x = TRUE)
world <- world[order(world$order), ]
# borders
ggplot(data = world, aes(x = long, y = lat, group = group)) +
geom_path()
# choropleth
ggplot(data = world, aes(x = long, y = lat, group = group)) +
geom_polygon(aes(fill = y2004))
## sessionInfo()
# R version 2.11.1 (2010-05-31)
# x86_64-pc-mingw32
#
# locale:
# [1] LC_COLLATE=Spanish_Spain.1252 LC_CTYPE=Spanish_Spain.1252
# [3] LC_MONETARY=Spanish_Spain.1252 LC_NUMERIC=C
# [5] LC_TIME=Spanish_Spain.1252
#
# attached base packages:
# [1] grid stats graphics grDevices utils datasets methods
# [8] base
#
# other attached packages:
# [1] ggplot2_0.8.7 digest_0.4.2 reshape_0.8.3 plyr_0.1.9
# [5] proto_0.3-8 maptools_0.7-34 lattice_0.18-8 sp_0.9-64
# [9] foreign_0.8-40
--
You received this message because you are subscribed to the ggplot2 mailing
list.
Please provide a reproducible example: http://gist.github.com/270442
To post: email ggp...@googlegroups.com
To unsubscribe: email ggplot2+u...@googlegroups.com
More options: http://groups.google.com/group/ggplot2
# Download electricity generation data from http://tonto.eia.doe.gov/cfapps/ipdbproject/iedindex3.cfm?tid=2&pid=2&aid=12&cid=&syid=2004&eyid=2008&unit=BKWH
# Download new map data from http://thematicmapping.org/downloads/world_borders.php
# Bring the thematicmapping data into R
library("rgdal")
world.map <- readOGR(dsn="C:/", layer="TM_WORLD_BORDERS-0.3")
# Save the map data as an R object
save(world.map, "worldmap.rdata")
# As needed, reload the data
library(maptools)
gpclibPermit()
load("worldmap.rdata")
# Prepare the world.map data for ggplot2
library(ggplot2)
# On some setups, fortify throws "Error in nchar(ID)"
# in that case, use setlocale
# Sys.setlocale("LC_ALL", locale = "C")
world.ggmap <- fortify(world.map, region = "NAME")
# Load the electricity generation data and clean it up to match with world.ggmape
elect.gen.tot <- read.csv("Total_Electricity_Net_Generation_(Billion_Kilowatthours).csv", sep = ",", dec = ".")
names(elect.gen.tot) <- c("id", "y2004", "y2005", "y2006", "y2007", "y2008")
# make sure the id column is in the same case for both sets
elect.gen.tot$id <- tolower(elect.gen.tot$id)
world.ggmap$id <- tolower(world.ggmap$id)
# merge the two data sets
world.ggmape <- merge(world.ggmap, elect.gen.tot, by = "id", all = TRUE)
world.ggmape <- world.ggmape[order(world.ggmape$order), ]
# NOTE: at this point, the electricity data country names do not match 100%
# with the thematicmapping country names (column "id").
# print out the country names using
# table(world.ggmape$id)
# and do a search for values of 1. Then find the corresponding country
# name with values > 1 and rename the country names in the electricity
# generation data to match (e.g. "Tanzania" becomes "united republic of
# tanzania").
# Once this data cleaning operation is complete, repeat the above steps
# starting with reading data into elect.gen.tot.
# Plot the data using ggplot2
world.plot <- ggplot(data = world.ggmape, aes(x = long, y = lat, group = group))
world.plot + geom_polygon(aes(fill = y2007)) + labs(x = "Longitude", y = "Latitude", fill = "TWh") + opts(title = "Net Electricity Generation in TWh for 2007\nData from EIA International Energy Statistics, 2008")
Thanks for contribution! Ploting map data is never easy and its always
nice to see a success story.
Hadley
> --
> You received this message because you are subscribed to the ggplot2 mailing list.
> Please provide a reproducible example: http://gist.github.com/270442
>
> To post: email ggp...@googlegroups.com
> To unsubscribe: email ggplot2+u...@googlegroups.com
> More options: http://groups.google.com/group/ggplot2
>
--
Assistant Professor / Dobelman Family Junior Chair
Department of Statistics / Rice University
http://had.co.nz/
It's likely to be some combination of the different graphics device
code in R and the different viewer you're using to look at the file.
Unfortunately it's all well outside the control of ggplot2.
Hadley
From: Tom Hopper <tomh...@gmail.com>
To: Felipe Carrillo <mazatla...@yahoo.com>
Sent: Tue, June 22, 2010 9:40:19 PM
Subject: Re: Plotting Data on a Map
Felipe,I am just learning these tools, too, so it may be a good learning opportunity for both of us. Please send me the files and I will try to put it together and plot it.Regards,Tom
On Mon, Jun 21, 2010 at 11:57 PM, Felipe Carrillo <mazatla...@yahoo.com> wrote:
Hi Tom:I am just starting to use rgdal and maptools but I have a long way to go. I went to a traininga couple of weeks ago and the instructor showed us a csv file and a shapefile with wolf data froma national park in the midwest. I am trying to put all of the csv data and some predicted dataon a map using ggplot2 but I am stuck with it. I am just trying to do this example because I want tosee if I can apply this example to fish. Let me know if interested.Felipe D. CarrilloSupervisory Fishery BiologistDepartment of the InteriorUS Fish & Wildlife ServiceCalifornia, USA
> Mon, Jun 21, 2010 at 11:57 PM, Felipe Carrillo <> ymailto="mailto:mazatla...@yahoo.com"
> href="mailto:mazatla...@yahoo.com">mazatla...@yahoo.com>
> Mon, Jun 21, 2010 at 3:00 AM, Hadley Wickham <> ymailto="mailto:had...@rice.edu"
> href="mailto:had...@rice.edu">had...@rice.edu>
> wrote:
>>>
>>>Hi
> Tom,
>>>>
>>>>Thanks for contribution! Ploting map
> data is never easy and its always
>>>>nice to see a success
> story.
>>>>
>>>>Hadley
>>>>
>>>>
>>>>On
> Saturday, June 19, 2010, Tom Hopper <> href="mailto:tomh...@gmail.com">tomh...@gmail.com>
> On Fri, Jun 18, 2010 at 11:39 AM, Tom Hopper <> ymailto="mailto:tomh...@gmail.com"
> href="mailto:tomh...@gmail.com">tomh...@gmail.com>
> wrote:
>>>>>
> Fernando,
>>>>>
>>>>> That worked perfectly;
> thank you!
>>>>>
>>>>> There were some
> mismatches in the country names, as you noted, but after cleaning up the
> electricity generation data everything looks great. I've updated the electricity
> generation data with the cleaned version and posted a graph to > target="_blank" href="http://box.net">box.net.
>>>>> the
> graph:
> http://www.box.net/tomhopper/1/22918943/452739712
>>>>>
>>>>>
> Below, for reference, is the complete R
> code.
>>>>>
>>>>> Thank you, and best
> regards,
>>>>>
>>>>>
> Tom
>>>>>
>>>>> # Download electricity
> generation data from > href="http://tonto.eia.doe.gov/cfapps/ipdbproject/iedindex3.cfm?tid=2&pid=2&aid=12&cid=&syid=2004&eyid=2008&unit=BKWH"
> target=_blank
> >http://tonto.eia.doe.gov/cfapps/ipdbproject/iedindex3.cfm?tid=2&pid=2&aid=12&cid=&syid=2004&eyid=2008&unit=BKWH
>>>>>
> # Download new map data from > href="http://thematicmapping.org/downloads/world_borders.php" target=_blank
> On Fri, Jun 18, 2010 at 2:10 AM, fernando <> ymailto="mailto:fgta...@gmail.com"
> href="mailto:fgta...@gmail.com">fgta...@gmail.com>
> wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
> Hi
> Tom,
>>>>>
>>>>>
>>>>>
>>>>>
> I think fortify can help you in translating the sp object to
> a
>>>>> data.frame. Then you can use merge to join the two
> tables. The code bellow
>>>>> illustrates this, although I
> think there are some problems in matching country
>>>>> names.
> Another issue is that if you add coord_map(), something strange
> happens
>>>>> with Antarctica (maybe a problem in shapefile
> order?).
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
> --
>>>>
>>>>> You received this message because
> you are subscribed to the ggplot2 mailing list.
>>>>> Please
> provide a reproducible example:
> http://gist.github.com/270442
>>>>>
>>>>> To
> post: email > href="mailto:ggp...@googlegroups.com">ggp...@googlegroups.com
>>>>>
> To unsubscribe: email ggplot2+> href="mailto:unsub...@googlegroups.com">unsub...@googlegroups.com
>>>>>
> More options:
> http://groups.google.com/group/ggplot2
>>>>>
>>>>
>>>>
>>>>--
>>>>Assistant
> Professor / Dobelman Family Junior Chair
>>>>Department of
> Statistics / Rice
> University
>>>>http://had.co.nz/
>>>>
>>>--
>
>>>
>>>You received this message because you are
> subscribed to the ggplot2 mailing list.
>>>Please provide a
> reproducible example: > >http://gist.github.com/270442
>>>
>>>To post:
> email > href="mailto:ggp...@googlegroups.com">ggp...@googlegroups.com
>>>To
> unsubscribe: email ggplot2+> href="mailto:unsub...@googlegroups.com">unsub...@googlegroups.com
>>>More
> options: > >http://groups.google.com/group/ggplot2
>>>
>>
>
>
[[alternative HTML version
> deleted]]