2011-12-16 10 views
8

Chciałbym stworzyć mapę USA (być może mapy termicznej), aby pokazać częstotliwość pewnych charakterystycznych stanów. Nie jestem pewien, jakiego pakietu użyć lub czy moje dane są w odpowiedniej formie. Moje dane znajdują się w tabeli ttUtwórz mapę cieplną USA ze skrótami stanu i częstotliwością charakterystyczną w R

tf 
AB AK AL AN AR AZ CA CO CT DC DE EN FL GA HI IA ID IL IN KS 
    1 21 31 1 12 56 316 53 31 16 7 1 335 63 11 42 29 73 40 2 

W większości przypadków moje skróty to USA (poza kilkoma kanadyjskimi przypadkami). Jakie jest najlepsze sugerowane podejście do graficznego wyświetlania tego na mapie?

Teraz, jak uzyskać ziarnistość poniżej 50 na kolor?

enter image description here

+1

[Maptools] (http://cran.r-project.org/web/packages/maptools /index.html) ('? maptools') i [maps] (http://cran.r-project.org/web/packages/maps/index.html) ('? maps') będą miłym punktem wyjścia . Możesz również znaleźć [widok zadań przestrzennych] (http://cran.r-project.org/web/views/Spatial.html). – Seb

+2

możliwy duplikat [bezrobocia na poziomie państwa w R] (http://stackoverflow.com/questions/5385713/state-level-unemployment-in-r) –

Odpowiedz

7

dwa pakiety: mapy, ggplot2. Jest to doskonały przykład na: map_data()

prostu zacząć:

tf= structure(list(state = structure(1:14, .Label = c("AK", "AL", 
"AR", "AZ", "CA", "CO", "CT", "DE", "FL", "GA", "IA", "IL", "IN", 
"KS"), class = "factor"), num = c(21L, 31L, 12L, 56L, 316L, 53L, 
31L, 7L, 335L, 63L, 42L, 73L, 40L, 2L), region = structure(c(2L, 
1L, 4L, 3L, 5L, 6L, 7L, 8L, 9L, 10L, 13L, 11L, 12L, 14L), .Label = c("alabama", 
"alaska", "arizona", "arkansas", "california", "colorado", "connecticut", 
"delaware", "florida", "georgia", "illinois", "indiana", "iowa", 
"kansas"), class = "factor")), .Names = c("state", "num", "region" 
), class = "data.frame", row.names = c(NA, -14L)) 

require(maps);require(ggplot2) 

states <- map_data("state") 
tfmerged <- merge(states, tf, sort = FALSE, by = "region") 
tfmerged <- tfmerged[order(tfmerged$order), ] 
qplot(long, lat, data = tfmerged, group = group, fill = num, 
geom="polygon") 

Następnie wypełnić resztki informacji Zjednoczonych.

+1

Czy po prostu chciałbym dodać L do moich danych liczbowych? – megv

+0

@megv, nie trzeba dodawać L, właśnie dodałem, żeby pokazać dane, których użyłem. Może być konieczne dodanie nazwy stanów, aby pasowała do regionu $ $, aby scalanie mogło działać. – aatrujillob

+0

Odkąd już mam tabelę ze skrótem stanu i zliczeń mogę to wstawić bezpośrednio do struktury. Przepraszam .. Jestem trochę nowy w tym. – megv

7

Innym podejściem z spplot:

library(maps) 
library(maptools) 
library(sp) 

Najpierw należy przeczytać dane i dodać kolumnę z nazwami państw:

txt <- "AB AK AL AN AR AZ CA CO CT DC DE EN FL GA HI IA ID IL IN KS 
    1 21 31 1 12 56 316 53 31 16 7 1 335 63 11 42 29 73 40 2" 

dat <- stack(read.table(text = txt, header = TRUE)) 
names(dat)[2] <-'state.abb' 
dat$states <- tolower(state.name[match(dat$state.abb, state.abb)]) 

Wtedy dostaniesz mapę i przekształcić go w SpatialPolygons:

mapUSA <- map('state', fill = TRUE, plot = FALSE) 
nms <- sapply(strsplit(mapUSA$names, ':'), function(x)x[1]) 
USApolygons <- map2SpatialPolygons(mapUSA, IDs = nms, CRS('+proj=longlat')) 

A teraz dodajesz informacje z m swoje dane:

idx <- match(unique(nms), dat$states) 
dat2 <- data.frame(value = dat$value[idx], state = unique(nms)) 
row.names(dat2) <- unique(nms) 

USAsp <- SpatialPolygonsDataFrame(USApolygons, data = dat2) 

końcu wykreślić go:

spplot(USAsp['value']) 

Dodany obraz enter image description here

+0

Czy możesz dodać obraz wyniku? –

+0

Czy istnieje metoda dodawania Hawajów i Alaski do tej mapy? – marc

+0

Tak, ale musisz użyć innej mapy. Na przykład 'mapUSA <- map (" world2 "," USA ", wypełnienie = TRUE, wykres = FALSE)'. –

Powiązane problemy