2013-10-17 27 views
0

我正嘗試將狀態縮寫添加到使用ggplot2生成的美國地圖並對其有一些困難。我相信「填充=」選項正在導致它,但我不確定。將狀態縮寫添加到使用ggplot2生成的地圖

下面我提供了我使用的代碼。最初,我以我想要的方式生成地圖,除了州名。接下來,我嘗試在相同的地圖上疊加狀態縮寫。

不幸的是,它不適合我。如果我從第一張地圖註釋掉「fill =」選項,我可以生成一個帶有州縮寫的地圖。但那張地圖並沒有顯示我打算展示的內容。我嘗試了幾種方法。我現在只是在代碼中留下一個選項。

要添加狀態縮寫,我正在遵循我在本論壇中閱讀的一些建議。特別是,我試圖按照日期爲2012年2月25日的標題爲「在地圖上以ggplot爲中心的名稱」的討論提供的建議。

我很感激任何關於如何將狀態縮寫添加/覆蓋到第一個地圖。

# Master US location data 
states <- map_data("state") 

# Read in the data 
rate <- read.csv("~/R/HealthCare/Data/Test_data.csv") 

names(rate) <- tolower(names(rate)) 
rate$numer <- as.factor(rate$numer) 
rate$region <- tolower(rate$statename) 


# Create data for US mapping 
tomap <- merge(states, rate, sort = FALSE, by = "region") 
tomap <- tomap[order(tomap$order), ] 


    ## US Map 

# 1. Target Map (w/o state abbr) 
p <- qplot(long, lat, data = tomap, 
      group = group, 
      fill = numer, 
      geom = "polygon") 

p + scale_fill_brewer(palette = "Greens", 
        guide = guide_legend(reverse = TRUE), 
        labels = c("1st cat", "2nd cat", 
           "3rd cat", "4th cat")) 



    # 2. Add State Abbreviations to Target Map 
stannote <- aggregate(cbind(long, lat, group, numer) ~ stateabbr, data = tomap, 
         FUN=function(x)mean(range(x))) 


q <- qplot(long, lat, data = tomap, 
      group = group, 
      #fill = numer, 
      fill = "red", #testing 
      geom = "polygon") + 
    geom_text(data=stannote, aes(long, lat, label = stateabbr), color = "blue", size=3) + 
    coord_map() 

q 

樣本數據文件如下所示 -

StateName,StateAbbr,Numer 
Alabama,AL,0 
Alaska,AK,0 
Arizona,AZ,0 
Arkansas,AR,0 
California,CA,0 
Colorado,CO,0 
Connecticut,CT,0 
Delaware,DE,0 
District of Columbia,DC,1 
Florida,FL,0 
Georgia,GA,0 
Hawaii,HI,0 
Idaho,ID,1 
Illinois,IL,0 
Indiana,IN,0 
Iowa,IA,1 
Kansas,KS,0 
Kentucky,KY,1 
Louisiana,LA,1 
Maine,ME,2 
Maryland,MD,0 
Massachusetts,MA,2 
Michigan,MI,0 
Minnesota,MN,1 
Mississippi,MS,0 
Missouri,MO,0 
Montana,MT,0 
Nebraska,NE,0 
Nevada,NV,1 
New Hampshire,NH,1 
New Jersey,NJ,2 
New Mexico,NM,1 
New York,NY,3 
North Carolina,NC,0 
North Dakota,ND,1 
Ohio,OH,0 
Oklahoma,OK,0 
Oregon,OR,2 
Pennsylvania,PA,0 
Rhode Island,RI,0 
South Carolina,SC,0 
South Dakota,SD,1 
Tennessee,TN,0 
Texas,TX,0 
Utah,UT,1 
Vermont,VT,2 
Virginia,VA,0 
Washington,WA,2 
West Virginia,WV,0 
Wisconsin,WI,0 
Wyoming,WY,0 
+0

你得到一個錯誤?這是'StateAbbr'和'stateabbr'(case)之間的區別引起的問題嗎? – Hugh

+0

@Hugh我在CSV文件中讀取後,將所有變量名稱(包括StateAbbr)轉換爲小寫,並在整個過程中使用小寫變量名稱。我面臨的問題是,當我嘗試將狀態縮寫添加到原始圖表時,出現「錯誤:提供給離散量程的連續值」。原始「fill =」語句中使用的變量是「numer」,它是一個離散變量(原始圖表與該變量正常工作)。我不太明白錯誤信息。這就是爲什麼我正在試驗其他的「fill =」,因爲它出現在上面的代碼中。 – user2634146

回答

1

由於經常發生在我身上帶R,它原來的錯誤消息,告訴你到底發生了什麼(它只是需要一段時間弄明白)。您的第二個數據集stannote中的numer變量是連續的(使用str(stannote)檢查結構以查看此內容)。所以你可以把這個變量改爲一個因子。但請注意:當您合計使用cbind時,我認爲您強制將該因子轉換爲數字變量,因此中的numer從1-4變爲0-3。

選項1:

stannote$numer = factor(stannote$numer, labels = c(0, 1, 2, 3)) 
qplot(long, lat, data = tomap, 
      group = group, 
      fill = numer, #testing 
      geom = "polygon") + 
    geom_text(data=stannote, aes(long, lat, label = stateabbr), 
        color = "blue", size=3) + scale_fill_brewer(palette = "Greens") 

或者,你可以刪除fill審美,你從呼叫geom_text整體劇情用fill = NULL設置。您實際上並不需要填充文字,只是爲了多邊形。在這種情況下,如果您使用ggplot而不是qplot,則可能只需爲geom_polygon設置填充美學。

選項2:

stannote$numer = as.numeric(stannote$numer) 
qplot(long, lat, data = tomap, 
      group = group, 
      fill = numer, #testing 
      geom = "polygon") + 
    geom_text(data=stannote, aes(long, lat, label = stateabbr, fill = NULL), 
        color = "blue", size=3) + scale_fill_brewer(palette = "Greens") 
+0

非常感謝。你是對的,解決方案隱藏在錯誤信息中。它現在很好用。 – user2634146