我正在使用下面显示的R代码,它加载库地图和RColorBrewer,以创建一个世界地图,其中的国家/地区按人口等级进行颜色编码.正如您在下图所示,我使用的是绿色调色板,其中绿色越深,人口
我想添加一个连续的颜色图例,显示完整的调色板,表示浅绿色=小人口和深绿色=大人口,但我找不到通过地图做到这一点的方法.你能告诉我在地图上添加连续颜色图例(或颜色键/颜色比例)的最简单方法是什么?
# Load libraries library(maps) library(RColorBrewer) # Load world data data(world.cities) # Calculate world population by country world.pop = aggregate(x=world.cities$pop, by=list(world.cities$country.etc), FUN=sum) world.pop = setNames(world.pop, c('Country', 'Population')) # Create a color palette palette = colorRampPalette(brewer.pal(n=9, name='Greens'))(nrow(world.pop)) # Sort the colors in the same order as the countries' populations palette = palette[rank(-world.pop$Population)] # Draw a map of the world map(database='world', fill=T, col=palette, bg='light blue')在库SDMTools中有功能legend.gradient
将此代码添加到代码的末尾应该会得到所需的结果:
# Draw a map of the world map(database='world', fill=T, col=palette, bg='light blue') x = c(-20, -15, -15, -20) y = c(0, 60, 60, 0) legend.gradient(cbind(x = x - 150, y = y - 30), cols = brewer.pal(n=9, name='Greens'), title = "TITLE", limits = "")
你将需要摆弄x& y坐标以使图例进入所需位置.
编辑
x和y坐标也会调整框的形状,因此我更改了代码,以便在仅更改legend.gradient函数中的数字时,框形状不会改变.以下是此代码应生成的内容