我正在使用以下示例数据和代码来生成世界地图:
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更改为其他值无济于事。我怎么能纠正这个?谢谢你的帮助。
修改
添加dF
的dput,这将有助于其他人重现数据框
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 :(得分:5)
您的问题是因为您正在使用mapCountryData的默认catMethod,它是&#39;分位数&#39;。如果您将catMethod设置为&#39; fixedWidth&#39;我想你会得到更接近你想要的结果。
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 ))
希望有所帮助。
答案 1 :(得分:2)
策划背后的原因是,法国之后的下一个价值是英国加上你有10个国家,你将它们划分为7个类别,这使得法国和英国属于同一颜色类别。默认情况下,mapCountryData需要7个类别来绘制...
按照您的代码准备的图表
尝试专门提供类别。试试以下......
colourPalette <- brewer.pal(nrow(dF),'RdYlGn')
mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,numCats=nrow(dF))
在完全引入类别之后准备的图表
<强>更新强>
您希望只将较低值涂成红色的情况(在本例中为法国)
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))
输出将是