2014-06-13 30 views
0

我使用下面的示例數據和代碼,以產生地圖世界的:rworldmap色標不連續

dF = read.table(text=" 
country, value 
'France', 7 
'United Kingdom', 64 
'Italy', 68 
'Sweden', 82 
'Nepal', 85 
'Japan', 86 
'Germany', 86 
'United States', 93 
'China', 94 
'Nigeria', 95" 
, header=TRUE, sep=",") 

library(rworldmap) 

sPDF <- joinCountryData2Map(dF, 
          joinCode = "NAME", 
          nameJoinColumn = "country", 
          verbose = TRUE) 

library(RColorBrewer) 
colourPalette <- brewer.pal(7,'RdYlGn') 
mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette) 

但是,填充在地圖上的顏色不是在一個連續的尺度。英國的顏色幾乎與法國相同,儘管它們的價值有很大不同。中國和美國也有不同的顏色,儘管它們的價值幾乎相同。我認爲顏色正在被填充爲分類值,而不是連續的漸變尺度。將brewer.pal的值從7更改爲其他人沒有幫助。我該如何解決這個問題?謝謝你的幫助。


編輯

添加dput的dF這將有助於他人複製數據幀

structure(list(country = c("France", "United Kingdom", "Italy", 
"Sweden", "Nepal", "Japan", "Germany", "United States", "China", 
"Nigeria"), value = c(7L, 64L, 68L, 82L, 85L, 86L, 86L, 93L, 
94L, 95L)), .Names = c("country", "value"), class = "data.frame", row.names = c(NA, 
-10L)) 
+0

示例不可重現。 –

+1

@Pascal - 它的發生是因爲在創建數據框時正在添加一些額外的空白符...這在'joinCountryData2Map'中沒有匹配.. – vrajs5

+0

從dF =語句中刪除了空格。 – rnso

回答

5

你的問題,是因爲你使用mapCountryData默認catMethod這就是「位數」。如果你將catMethod設置爲'fixedWidth',我想你會得到更接近你想要的結果。

mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,catMethod='fixedWidth') 

或者你可以指定例如類別符catMethod = c(0,20,40,60,80,100)

colourPalette <- brewer.pal(5,'RdYlGn') 
mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,catMethod=c(0,20,40,60,80,100)) 

然後,您可以根據需要添加更詳細的圖例。

mapParams <- mapCountryData(sPDF, nameColumnToPlot="value", colourPalette=colourPalette, catMethod=c(0,20,40,60,80,100), addLegend=FALSE) 

do.call(addMapLegend, c(mapParams 
          , legendLabels="all" 
          , legendWidth=0.5)) 

希望有所幫助。

+0

首先,祝賀製作這樣一款優秀的軟件。關於這個問題,我一直在尋找你的第一個解決方案,它可以自動在任何數據上產生連續的比例。如果包含術語「連續」或「漸變」(而不是「固定寬度」),則會變得易於理解。我想在連續的數據上使用這個紅黃綠的方案。任何其他方式,我可以使它更有效? – rnso

+0

@rnso謝謝!你說得對,我可以說得更清楚,只需要找到時間。沒有連續的選項,但你可以增加'numCats'來獲得類似的效果。 'mapCountryData(SPDF,nameColumnToPlot = 「值」,colourPalette = colourPalette,catMethod = '固定寬度',numCats = 100)' – Andy

2

繪圖背後的原因是,下一個值後,法國是英國,再加上你有10個國家你將它們分成7類,使法國和英國的顏色類別相同。默認情況下mapCountryData需要7類爲繪製...

繼代碼編寫 Following chart prepared by your code

嘗試專門提供類圖。試試以下...

colourPalette <- brewer.pal(nrow(dF),'RdYlGn') 
mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,numCats=nrow(dF)) 

如下圖準備引入類別後專門 Following chart prepared after introducing category exclusively


更新

情況下,你只想較低數值是紅色的(在這種情況下法國)

library(fields) 
colourPalette = two.colors(n=max(dF$value)-min(dF$value)+1, start="red", middle='yellow', end="dark green", alpha=1.0) 
colourPalette = colourPalette[dF$value - min(dF$value) + 1] 
mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette, numCats=nrow(dF)) 

輸出將 enter image description here

+0

我想要根據價值本身繪製顏色,而不是根據類別繪製顏色。我想根據'value'參數連續的顏色漸變。因此,法國應該是紅色的,所有其他國家都應該有不同的綠色。 – rnso

+0

是否可以使用本頁所示的連續顏色漸變比例(並避免分類比例):http://docs.ggplot2.org/0.9.3.1/scale_gradient.html。 – rnso

+0

我以爲你想使用rworldmap軟件包...如果你想使用ggplot製作地圖,那麼你可以使用ggmap .. – vrajs5