【问题标题】:Moving position of country names in RworldmapRworldmap中国家名称的移动位置
【发布时间】:2015-06-04 15:42:48
【问题描述】:

有没有办法在用 rworldmap 生成的地图上移动国家名称的位置?例如,在下面的示例中,我想移动中美洲国家的名称,以便于阅读。

如果没有,我欢迎您提出有关标记地图的替代方法的建议。谢谢。

library(rworldmap)  
df <- NULL  
df$country <- c("El Salvador","Mexico","Panama", "Nicaragua", "Costa Rica",       "Cuba", "Honduras", "Guatemala", "Venezuela")  
df$code<-c("SLV", "MEX", "PAN", "NIC", "CRI", "CUB", "HON", "GTM", "VEN")  
df$number<-c(100, 500, 200, 150, 300, 390, 140, 330, 60)  
df<-as.data.frame(df)  
sPDF <- joinCountryData2Map( df, joinCode = "ISO3", nameJoinColumn = "code") 
mapCountryData(sPDF, nameColumnToPlot="number") 
sPDFmyCountries <- sPDF[sPDF$NAME %in% df$country,] 
mapCountryData(sPDFmyCountries, nameColumnToPlot="number", catMethod="fixedWidth", colourPalette="heat", borderCol="black",  mapTitle = ("Made Up Number"))
text(sPDFmyCountries, labels="NAME")

【问题讨论】:

  • text(sPDFmyCountries, labels="NAME") 返回Error in as.double(y) : cannot coerce type 'S4' to vector of type 'double'

标签: r maps rworldmap


【解决方案1】:

您可以在空间或标准数据框中创建一个偏移列,并将其作为文本标签位置的参数。 (我和上面的评论有同样的问题,所以我只是将 spdf 转换为常规的 df):

mapCountryData(sPDFmyCountries, nameColumnToPlot="number", catMethod="fixedWidth", colourPalette="heat", borderCol="black",  mapTitle = ("Made Up Number"))
df2=as.data.frame(sPDFmyCountries)
df2$latOffset=4 #4 degree offset
df2$lonOffset=4
text(df2$LON+df2$latOffset, df2$LAT+df2$lonOffset, labels=df2$country)

鉴于您所映射的国家/地区的安排,我不知道您是否会找到一种解决方案,该解决方案可以自动整理重叠的文本框,并且不会将名称与一些较小的国家/地区相距太远,所以我想您可能想要根据自己的喜好调整各个偏移列...

如果您确实想找到一种自动整理标签的方法,似乎有一些资源: https://stats.stackexchange.com/questions/16057/how-do-i-avoid-overlapping-labels-in-an-r-plot

【讨论】:

  • 谢谢卢卡斯!我将从那开始。顺便说一句,我第一次运行您的建议时它起作用了,然后我尝试重新运行上面的原始代码,我得到了与上面的@hrbrmstr 相同的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
相关资源
最近更新 更多