0

我正在使用以下示例数据和代码来生成世界地图:

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 更改为其他值并没有帮助。我该如何纠正?谢谢你的帮助。


编辑

添加 dputdF将帮助其他人重现数据框

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))
4

2 回答 2

6

您的问题是因为您使用的是 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 ))

希望有帮助。

于 2014-06-13T09:31:43.040 回答
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))

输出将是 在此处输入图像描述

于 2014-06-13T05:19:04.717 回答