为世界地图分配专门定义的色标

时间:2018-09-26 09:47:07

标签: r rworldmap

我有一个7个国家/地区的清单,每个国家分别有一个特定的分数。使用此代码,色阶从最低分数(0.1367)开始,到最高分数(0.3760)结束。我希望标度从较低的值(例如0.08)开始,然后从较高的值(例如0.4)停止,因为例如0.1367仍然是一个相当不错的分数,但由于它是数据集中的最低分数,因此现在显示蓝色。

如何调整色标以从数据集中未包含的较低值开始?

这是我的代码:

library(rworldmap)
library(RColorBrewer)

d = read.table(text="
country score
Italy 0.3760
Belgium 0.1431
France 0.2028
Netherlands 0.1431
Australia 0.1411
Germany 0.1431
'United States' 0.1367
", header=T)

numCats <- 100
palette = colorRampPalette(c('blue','lightblue','green', 'yellow', 'red')) 
(numCats)
dt <- joinCountryData2Map(d, joinCode="NAME", nameJoinColumn="country")

map18 = mapCountryData(dt, nameColumnToPlot="score", 
catMethod="fixedWidth",numCats = numCats,colourPalette = palette, mapTitle = 
"AHP Score Obtained",missingCountryCol = 'grey',addLegend=FALSE)


do.call(addMapLegend
        ,c(map18
           ,horizontal=TRUE
           ,legendWidth=0.5))

worldmap_image

1 个答案:

答案 0 :(得分:0)

您必须手动设置希望预先指定值的范围。完成此操作后,将您的范围划分为相等数量的类(在您的情况下,您有100个类,这意味着您需要101个数字或标签)以形成连续序列。

limits <- range(0.08, 0.40)  # custom range
legend.limits <- seq(min(limits), max(limits), len = 101)  # splitting to make continuous variable

然后我们在catMethod函数中手动修改mapCountryData以反映我们的自定义范围:

map18 <- mapCountryData(dt, nameColumnToPlot="score",
                        catMethod= legend.limits,  # custom range for legend
                        numCats = numCats,
                        colourPalette = "rainbow",  # using default colors
                        mapTitle = "AHP Score Obtained",
                        missingCountryCol = 'grey',
                        addLegend=FALSE)

do.call(addMapLegend, c(map18, horizontal = TRUE,
                        legendWidth = 0.5,
                        legendLabels = "limits"))

enter image description here

请注意,我还将colourPalette参数更改为默认的Rainbow标度。您最初指定的palette变量指定5种颜色,但是由于我们现在有100多个类,因此colourPalette将需要使用默认值之一。