【问题标题】:rworldmap color scale not continuousrworldmap色标不连续
【发布时间】:2014-06-13 04:17:53
【问题描述】:

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

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

【问题讨论】:

  • 示例不可重现。
  • @Pascal - 它的发生是因为在创建数据帧时添加了一些额外的空格......这在joinCountryData2Map 中没有得到匹配..
  • 从 dF= 语句中删除空格。

标签: r dictionary plot rworldmap


【解决方案1】:

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

希望对您有所帮助。

【讨论】:

  • 首先恭喜你制作出这么好的软件。关于这个问题,我正在寻找你的第一个解决方案,它可以自动对任何数据产生连续的比例。如果包括术语“连续”或“渐变”(而不是“固定宽度”),它将变得容易理解。我想在连续数据上使用这种红-黄-绿方案。还有什么方法可以让它更有效吗?
  • @rnso 谢谢!你说得对,我可以说得更清楚,只是需要找时间。没有连续选项,但您可以增加 numCats 以获得类似的效果。 mapCountryData(sPDF,nameColumnToPlot="value",colourPalette=colourPalette,catMethod='fixedWidth',numCats=100)
【解决方案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))

输出将是

【讨论】:

  • 我想根据值本身而不是根据类别绘制颜色。我想要根据“值”参数的连续颜色渐变。因此,法国应显示为红色,所有其他国家/地区应显示为不同深浅的绿色。
  • 是否不能使用连续的颜色渐变比例(并避免分类比例),如本页所示:docs.ggplot2.org/0.9.3.1/scale_gradient.html
  • 我以为你想使用 rworldmap 包...如果你想用 ggplot 制作地图,那么你可以使用 ggmap..
  • 我必须编辑上面的评论。但问题仍然存在,是否可以在 rworldmap 中具有连续的颜色渐变比例?
  • 颜色是连续的,唯一的问题是法国是异常值,这给人一种颜色不连续的错觉。你只想要红色的法国和绿色的其他颜色。我添加的是哪种情况。。?
猜你喜欢
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 2023-04-01
  • 2018-11-10
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多