rworldmap color scale not continuous
我正在使用以下示例数据和代码来生成世界地图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 更改为其他值也无济于事。我该如何纠正?谢谢你的帮助。
编辑
添加
1 2 3 4 5 | 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)) |
您的问题是因为您对 mapCountryData 使用了默认的 catMethod,即"分位数"。如果您将 catMethod 设置为 'fixedWidth',我认为您会得到更接近您想要的结果。
1 | mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,catMethod='fixedWidth') |
或者您可以指定类别中断,例如catMethod=c(0,20,40,60,80,100)
1 2 | colourPalette <- brewer.pal(5,'RdYlGn') mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,catMethod=c(0,20,40,60,80,100)) |
然后您可以根据需要添加更详细的图例。
1 2 3 4 5 | 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 )) |
绘图背后的原因是,法国之后的下一个值是英国加上你有 10 个国家,你将它们分为 7 个类别,这使法国和英国处于相同的颜色类别。默认情况下,mapCountryData 采用 7 个类别进行绘图...
以下图表由您的代码准备
尽量只提供类别。尝试遵循...
1 2 | colourPalette <- brewer.pal(nrow(dF),'RdYlGn') mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,numCats=nrow(dF)) |
以下是独家介绍品类后准备的图表
更新
您只想将较低的值涂成红色的情况(在本例中为法国)
1 2 3 4 | 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)) |
输出将是